Il mio background è più nella programmazione web piuttosto che nell'amministrazione del database, quindi per favore correggimi se sto usando la terminologia sbagliata qui. Sto cercando di capire il modo migliore per progettare il database per un'applicazione che codificherò.
La situazione: ho rapporti in una tabella e raccomandazioni in un'altra tabella. Ogni rapporto può avere molti consigli. Ho anche una tabella separata per le parole chiave (per implementare la codifica). Tuttavia, desidero disporre di un solo set di parole chiave che viene applicato sia ai rapporti che ai consigli, in modo che la ricerca di parole chiave fornisca rapporti e consigli come risultati.
Ecco la struttura con cui ho iniziato:
Reports
----------
ReportID
ReportName
Recommendations
----------
RecommendationID
RecommendationName
ReportID (foreign key)
Keywords
----------
KeywordID
KeywordName
ObjectKeywords
----------
KeywordID (foreign key)
ReportID (foreign key)
RecommendationID (foreign key)
Istintivamente, ritengo che questo non sia ottimale e che i miei oggetti taggable siano ereditati da un genitore comune e che tale genitore di commento sia taggato, il che darebbe la seguente struttura:
BaseObjects
----------
ObjectID (primary key)
ObjectType
Reports
----------
ObjectID_Report (foreign key)
ReportName
Recommendations
----------
ObjectID_Recommendation (foreign key)
RecommendationName
ObjectID_Report (foreign key)
Keywords
----------
KeywordID (primary key)
KeywordName
ObjectKeywords
----------
ObjectID (foreign key)
KeywordID (foreign key)
Dovrei andare con questa seconda struttura? Mi sto perdendo qualche preoccupazione importante qui? Inoltre, se vado con il secondo, cosa dovrei usare come nome non generico per sostituire "Oggetto"?
Aggiornare:
Sto usando SQL Server per questo progetto. È un'applicazione interna con un numero limitato di utenti non concorrenti, quindi non prevedo un carico elevato. In termini di utilizzo, le parole chiave verranno probabilmente utilizzate con parsimonia. È praticamente solo a scopo di reportistica statistica. In tal senso, qualunque soluzione segua probabilmente influenzerà solo tutti gli sviluppatori che dovranno mantenere questo sistema in linea ... ma ho pensato che fosse buono implementare buone pratiche ogni volta che potevo. Grazie per tutte le informazioni!