Sto progettando un gioco in cui un personaggio ha molti oggetti e quegli oggetti possono essere di molti tipi. C'è una tabella dei personaggi e dodici diverse tabelle di possibili elementi suddivisi per tipo (come armi, armature e vari altri tipi di oggetti).Normalizzare questo database: quale sarebbe l'ideale in questo scenario?
Voglio creare una tabella per contenere istanze di questi tipi di elementi (in pratica una tabella di elementi di caratteri) ogni riga avrà una chiave esterna dalla tabella dei caratteri per indicare quale personaggio ha la proprietà di quell'elemento.
All'inizio ho pensato di creare delle chiavi esterne nella tabella degli oggetti dei personaggi - una chiave per ciascuna delle dodici tabelle degli articoli. Ma dal momento che ogni elemento può essere di un solo "tipo", questo porterebbe a undici campi null in ogni riga e ciò sembra sbagliato.
Quale sarebbe l'approccio migliore? Devo ancora creare il database, così posso intrattenere altre idee di inventario che non usano dodici tabelle di articoli, ma so questo: l'interfaccia di amministrazione consentirà a un utente di aggiungere/rimuovere/modificare gli elementi di ciascun tipo secondo necessità.
Inoltre, mi piacerebbe attenermi alla migliore pratica di normalizzazione, quindi ignorerò l'inevitabile "A chi importa? Basta fare ciò che funziona e utilizzare campi null-capaci".
La migliore pratica di normalizzazione non è sempre la migliore pratica di programmazione. In particolare, tutto ciò che richiederebbe l'interrogazione di 12 tabelle quando è possibile garantire che restituirai solo le righe da 1 di esse non è la migliore prassi di programmazione, indipendentemente da quanto compatto e non ridondante sia il tuo set di dati. Quali sono le tue priorità per questo sistema? – Kylotan
@Kylotan +1 - la normalizzazione dovrebbe sempre essere applicata, ma è un atto di bilanciamento, in teoria è possibile normalizzare fino all'ennesima potenza, ma a questo punto si avranno molte tabelle, rallentando le prestazioni della query. – Dal