Il principale svantaggio di memorizzare la colonna in questo modo è nello spazio di archiviazione in quanto il numero di righe si riduce.
Piuttosto che una colonna di caratteri, è possibile utilizzare un ENUM()
se si dispone di un insieme fisso di scelte che raramente, se non mai, il cambiamento, e ancora evitare di creare una tabella aggiuntiva di opzioni religione a cui questo ha una chiave esterna . Tuttavia, se le scelte saranno fluide, le regole di normalizzazione preferirebbero che le scelte fossero collocate nella propria tabella con una chiave esterna nella tabella utente.
Ci sono altri vantaggi oltre allo spazio di archiviazione per tenerli in un'altra tabella. La loro modifica è un gioco da ragazzi. Per cambiare Christian
a Christianity
, si può fare un singolo cambiamento nella tabella religioni, piuttosto che fare il potenzialmente costoso (se hai un sacco di righe e di religione non è indicizzato)
UPDATE users SET religion='Christianity' WHERE religion='Christian'
... si può fare la molto più semplice e meno costoso
UPDATE religions SET name='Christianity' WHERE id=123
Naturalmente, è anche far rispettare l'integrità dei dati digitando su una tabella religioni. Diventa impossibile inserire un valore non valido come lo Christain
errato.
fonte
2011-12-30 03:55:15
Vorrei aver pensato di dirlo così. – Taymon
Come vengono effettivamente impedite le anomalie di modifica dei dati senza alcun vincolo (CHECK o FOREIGN KEY) in questo modello? (Ignorare qualsiasi applicazione di codice client tramite un ORM o simile) – gbn
Questo è un grande punto che si presenta. Potrebbe essere inserito un controllo, ma non ci sarebbe alcuna fonte di modifica dei dati. Potresti fare la stessa domanda riguardo a qualsiasi valore di dati atomici. Non credo sia sempre necessario prevenire le anomalie di modifica dei dati. Sentiti libero di non essere d'accordo. – user