Questa domanda è comparsa un paio di volte in vari forum nella mia ricerca, ma nessuna ha fornito una risoluzione concisa.Tabelle di database, una tabella che fa riferimento a più tabelle non correlate
Se ho le seguenti tabelle:
User
+- id
+- username
+- password
Article
+- id
+- title
+- content
e voglio unirmi a loro, al fine di determinare chi ha creato quello articoli, si potrebbe semplicemente aggiungere la colonna user_id a articolo da utilizzare come riferimento. In alternativa, sto aggiungendo una tabella intermedia per mostrare che/quando/ciò che, ad esempio:
User
+- ...
Article
+- ...
ChangeHistory
+- id
+- article_id
+- user_id
+- type [enum(insert, update, delete)]
+- datetime
Ora questo va bene, ma il sistema su cui sto lavorando ha bisogno di essere molto più dinamico, in quella nuova i moduli possono essere facilmente introdotti e integrati. Così ora se posso aggiungere un Media tavolo ho bisogno di dividere il ChangeHistory tra articolo e media avere:
User
+- ...
Article
+- ...
Media
+- id
+- title
+- path
ArticleChangeHistory
+- id
+- article_id
+- user_id
+- type [enum(insert, update, delete)]
+- datetime
MediaChangeHistory
+- id
+- media_id
+- user_id
+- type [enum(insert, update, delete)]
+- datetime
Questo può sfuggire di mano rapidamente con l'introduzione di molti moduli. Ogni modulo dovrebbe essere responsabile della creazione e gestione della propria tabella ChangeHistory.
TL; DR: Quali pratiche posso esplorare per creare una tabella intermedia in grado di ricevere riferimenti a più tabelle non correlate? Potrei aggiungere un campo * record_type *, tenendo il nome della tabella a cui appartiene il record, ma è brutto. Avrei bisogno di qualcosa tipo "ID tavolo" per fare riferimento alla tabella da cui proviene. In questo modo, quando i moduli/se vengono aggiunti o rimossi, il modello non va in pezzi.
Qualche idea? Grazie mille in anticipo.
C'è qualche motivo per cui consideri un "ID tabella" migliore di "record_type"? –