Sto costruendo un database di donatori per un'organizzazione senza scopo di lucro e un problema su cui sto riflettendo è come archiviare alcuni dati dei donatori. Ci sono alcune famiglie per le quali acquisiamo i nomi di entrambi i coniugi, quindi ogni coniuge ottiene il proprio record nel DB, e naturalmente condividono lo stesso indirizzo. Perché è probabile che nel database esista più persone di una famiglia e condivideranno lo stesso indirizzo (marito, moglie, figli), sto considerando di memorizzare gli indirizzi in una tabella separata e di avere Address_ID come una chiave esterna sul tavolo del programma. Ciò ridurrebbe la quantità di dati duplicati e, quando si trattava di affrontare le modifiche, sarebbe molto più facile da gestire per più donatori che fanno parte di una famiglia.
Table: Roster
Columns:
Roster_ID (PK)
PrimaryRoster_ID (FK, references Roster_ID of the head of the household)
Address_ID (FK)
FirstName
LastName
Phone
Table: Address
Columns:
Address_ID
Street
Apt
City
State
ZipCode
Non ho ancora costruito la GUI per inserire i dati - Sto ancora costruendo il DB e lo popolo tramite script, ma l'idea è che quando viene creato un nuovo donatore, gli viene assegnata la Primaria, e quindi qualsiasi altro donatore che fa parte della stessa famiglia avrà il Roster_ID del donatore primario popolato nella colonna PrimaryRoster_ID in modo che possa essere creato un collegamento tra i membri della famiglia.
Le persone nella stessa famiglia non devono avere lo stesso indirizzo (se non lo fanno, verrà creato un record di indirizzo separato per quel donatore), ma se ci sono 4 persone in una famiglia, tutte con DB separato i record e l'utente che immette i dati assegna a tutti loro lo stesso record di indirizzo, nella tabella Indirizzo sarà presente un solo record, con 4 record nella tabella Elenco con record di indirizzo come FK per associare ciascun individuo a tale indirizzo.
Qualcuno può pensare a un modo migliore di gestirlo, o questo design sarebbe sufficiente? La dimensione del database in questo momento è di circa 150 record nella tabella di riepilogo, con forse un massimo di 1000 record in fondo alla strada.
Modifica: leggermente modificato il design della tabella: mi sono reso conto che Address_ID doveva essere solo un FK in Roster invece di avere una tabella Roster_Address.