Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Banco de dados relacional projeta vários tipos de usuários


Seu caso se parece com uma instância de classe/subclasse.

Existem duas maneiras clássicas de projetar tabelas SQL para lidar com subclasses. Cada um tem vantagens e desvantagens.

Uma maneira é chamada de "Herança de Tabela Única". Neste design há apenas uma mesa para todos os tipos de usuários. Se uma determinada coluna não pertence a uma determinada linha, a interseção é deixada NULL. Uma coluna pode ser adicionada para indicar o tipo de usuário.

Outra maneira é chamada de "Herança de tabela de classe". Isso é muito parecido com a resposta que Nanego deu, com algumas pequenas mudanças. Há uma tabela para usuários, com todos os dados comuns e um campo de id. Há uma tabela para cada subclasse, com dados que pertencem a essa subclasse. O campo id geralmente é configurado como uma cópia do campo id na linha correspondente na tabela de usuários. Desta forma, a chave de subclasse pode fazer dupla função, atuando tanto como chave primária quanto como chave estrangeira referenciando a tabela do usuário. Esta última técnica é chamada de "Chave Primária Compartilhada". Requer um pouco de programação na hora da inserção, mas vale a pena. Ele reforça a natureza de um para um do relacionamento e acelera as junções necessárias.

Você pode procurar todos esses três designs como tags no SO ou como artigos na web.