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

Database:posso avere attributi nullable in un terzo database in formato normale?

Il modo in cui i valori nulli sono definiti in SQL - come non valori che non possono essere confrontati con i valori di dominio - significa che violano 1NF (e tutte le forme normali superiori). Una relazione (la struttura matematica rappresentata dalle tabelle normalizzate) deve avere un unico valore per ogni colonna per ogni riga. Null significa che non abbiamo alcun valore e una colonna nullable significa che abbiamo due relazioni in una tabella:una relazione di supertipo che include tutte le colonne tranne quella nullable e una relazione di sottotipo che ha la stessa chiave primaria e la colonna precedentemente nullable, per in cui possiamo registrare solo le righe per le quali l'attributo è noto. Lo scopo della normalizzazione è di scomporre un insieme di dati in fatti elementari senza perdere informazioni, quindi avere due relazioni in un'unica tabella contraddice l'obiettivo e rende più complicate cose come l'algebra relazionale/calcolo.

Le forme normali sono strutture formali logicamente definite, non best practices industriali che possono essere adattate alla situazione, quindi non vedo molto spazio per polemiche. Se dovremmo usarli e come dovrebbero essere gestiti è un argomento più interessante.

Mentre i null violano le forme normali, non significa che non puoi usare i null nel tuo database SQL. Hanno rischi oltre che vantaggi. Li uso anch'io, ma con considerazione.