Sto avendo un'interessante discussione con un altro progettista di database sulla normalizzazione. In questo esempio, abbiamo una tabella GameTitles e ogni record deve contenere l'anno in cui il gioco è stato rilasciato. Dice che 2NF impone che tutto debba essere normalizzato, quindi, per essere conforme, il campo dell'anno dovrebbe essere suddiviso in una tabella ReleaseYears con la sua chiave primaria a cui fa riferimento la tabella GameTitles. Dico che dovrebbe rimanere un campo sul tavolo GameTitles stesso.
La mia tesi per questo è che un anno è solo un valore numerico non primitivo che è statico per sua natura (cioè, il 2011 sarà sempre il 2011). Per questo motivo, funge da identificatore proprio e non ha bisogno di nulla per fare riferimento poiché è quello che è. Ciò introduce anche una manutenzione aggiuntiva poiché ora è necessario aggiungere un nuovo anno alla tabella solo per fare riferimento. Se prepopoli la tabella con un ampio intervallo di anni, hai record aggiuntivi che potenzialmente non avranno alcun riferimento a loro. Ciò aumenta anche le dimensioni del database poiché ora si dispone di una tabella aggiuntiva, un overhead dei record e la chiave primaria aggiuntiva per l'anno stesso. Se si tiene l'anno come campo nella tabella GameTitles, si eliminano tutti questi costi di manutenzione e costi aggiuntivi.
Pensi su questo?
modifica: voleva pubblicare questo su StackOverflow. Qualcuno può votare per eliminare questo o segnalarlo per l'attenzione?