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

Relacionamentos Identificados vs Não Identificados (de novo!!!)


Você está pensando demais na ligação entre opcionalidade e identidade. Até que tudo seja mais natural para você, é melhor pensar neles como sendo completamente não relacionados .

Sobre a opcionalidade, é importante lembrar que a opcionalidade é direcional. Para usar seu exemplo de employee_equipment :Claro, os funcionários não precisam de equipamentos. A relação um-para-muitos de employee para employee_equipment é opcional. Ao mesmo tempo, olhando pela perspectiva oposta, a relação é obrigatória. Você não pode ter um registro em employee_equipment a menos que haja um employee para associá-lo.

Identidade não tem nada a ver com opcionalidade, exceto coincidentemente uma relação de identificação é obrigatória da criança para o pai. Se também é obrigatório do pai para a criança, não está aqui nem lá no que diz respeito à identidade.

O que torna um relacionamento identificável é que você precisa saber de qual pai você está falando (assim como algumas outras coisas) para saber de qual criança você está falando. Ou seja, a chave primária do filho deve incluir uma chave estrangeira para o pai.

Tabelas de interseção puras (por exemplo, employee_equipment ) são bons exemplos disso. A chave primária de uma interseção pura é a combinação das chaves estrangeiras para ambas as tabelas pai. Observe que algumas pessoas também podem adicionar uma chave substituta a esses tipos de tabelas. Não importa tanto do ponto de vista da identidade se houver várias chaves candidatas. O que é importante para determinar a identidade é se a chave estrangeira faz parte de uma chave candidata, quer essa chave candidata seja ou não a chave primária.

Outro bom exemplo seria algo como o catálogo de metadados de um banco de dados, onde uma coluna é identificada pela tabela à qual pertence, assim como a tabela é identificada pelo esquema em que está e assim por diante. Saber que uma coluna se chama NAME não diz qual coluna é. Sabendo que é o NAME coluna no CUSTOMER mesa ajuda. (Você também terá que saber qual esquema CUSTOMER está dentro, e assim por diante).