Mysql
 sql >> Database >  >> RDS >> Mysql

Identificare e non identificare le relazioni (di nuovo!!!)

Stai sovrastimando il collegamento tra opzionalità e identità. Fino a quando l'intera faccenda non ti viene più naturale, è meglio pensare che siano completamente indipendenti .

Riguardo all'opzionalità, è importante ricordare che l'opzionalità è direzionale. Per usare il tuo esempio di employee_equipment :Certo, i dipendenti non hanno bisogno di attrezzature. La relazione uno-a-molti da employee a employee_equipment è facoltativo. Allo stesso tempo, guardandola dalla prospettiva opposta, la relazione è obbligatoria. Non puoi avere un record in employee_equipment a meno che non ci sia un employee a cui associarlo.

L'identità non ha nulla a che fare con l'opzionalità, tranne che per caso una relazione identificativa è obbligatoria dal bambino al genitore. Se sia obbligatorio anche dal genitore al figlio non è né qui né lì per quanto riguarda l'identità.

Ciò che rende identificabile una relazione è che devi sapere di quale genitore stai parlando (così come alcune altre cose) per sapere di quale bambino stai parlando. Cioè, la chiave primaria del figlio deve includere una chiave esterna per il genitore.

Tabelle di intersezione pure (ad es. employee_equipment ) ne sono un buon esempio. La chiave primaria di un'intersezione pura è la combinazione delle chiavi esterne in entrambe le tabelle padre. Nota che alcune persone possono anche aggiungere una chiave surrogata a questo tipo di tabelle. Non importa molto dal punto di vista dell'identità se ci sono più chiavi candidate. Ciò che è importante per determinare l'identità è se la chiave esterna fa parte di una chiave candidata, indipendentemente dal fatto che la chiave candidata sia o meno la chiave primaria.

Un altro buon esempio potrebbe essere qualcosa come il catalogo di metadati di un database, in cui una colonna è identificata dalla tabella a cui appartiene, proprio come la tabella è identificata dallo schema in cui si trova, e così via. Sapendo che una colonna si chiama NAME non ti dice di quale colonna si tratta. Sapendo che è il NAME colonna nel CUSTOMER la tavola aiuta. (Dovrai anche sapere quale schema CUSTOMER è dentro e così via).