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

Design DB:tabella dei membri separata o tutta in una tabella?

Dipende molto da quali sono questi "altri" dettagli. Questa è una domanda comune e interessante ea prima vista non esiste una risposta "difficile e veloce". Ma se pensiamo alla questione in modo più astratto, all'effettiva relazione tra gli attributi ("dettagli") di qualsiasi cosa particolare che si desidera rappresentare, potremmo trovare un po' di chiarezza.

Nella tua domanda affermi che gli amici hanno dettagli "minimi" e "altri". Invece di classificare questi dettagli come "minimi" o "altri", classifichiamoli in base al fatto che qualsiasi dettaglio individuale ("atomico") possa essere determinato o meno da ciò che rende unico un amico.

Presumo che ci sia una chiave primaria (PK), come FriendID o indirizzo e-mail o qualcosa del genere. Considerando questo identificatore univoco, chiediti:"Se mi viene fornito esattamente un FriendID (o e-mail o qualunque cosa tu stia usando come PK) di quali dettagli di quell'amico sono assolutamente sicuro? Ad esempio, dato FriendID=2112, sono assolutamente conosco il nome, il cognome e la data di nascita di quell'amico, ma io non conosci assolutamente il numero di telefono di quell'amico perché ce n'è più di uno.

Raggruppa in una tabella tutti i dettagli che conosci inequivocabilmente dato il PK. Inserisci i dettagli per i quali hai bisogno di più dati (come "casa" o "lavoro" nel caso di numeri di telefono) nelle tabelle "figlio", con chiave esterna alla tabella "genitore" sul PK. (Nota:è estremamente probabile che la PK della tabella figlia sia composta, ovvero composta dalla PK della tabella padre e dal fattore di differenziazione (come "casa" o "lavoro" in questo esempio). Chiavi composite per i molti lati di 1-M le relazioni sono molto buone.)

I fanatici del database chiamano questa scomposizione basata su dipendenze funzionali .