Come faccio a creare una colonna (tipo, ID) (aka "polimorfica") - chiave esterna in MS Access?

StackOverflow https://stackoverflow.com/questions/154209

  •  03-07-2019
  •  | 
  •  

Domanda

In Ruby-on-Rails, questa è chiamata "associazione polimorfica". "

Ho diverse Commentable nella mia applicazione, le tabelle per ognuna sono sotto:

Post
id | title | text | author (FK:Person.id) | ...

Person
id | name | ...

Photo
id | title | owner (FK:Person.id) | path | ...

Vorrei aggiungere una tabella Commenti come segue:

Comments
id | commentable_type | commentable_id | text | author (FK:Person.id)

Capisco che perdo l'integrità referenziale del database in questo modo, ma l'unica altra opzione è avere più tabelle Commenti : PostComments , PersonComments , PhotoComments , ...

E ora per la domanda:

Come posso creare un modulo che spiegherà come eseguire la ricerca, prima ottenendo il nome della tabella da Comments.commentable_type e poi l'id da Comments.commentable_id ?

È stato utile?

Soluzione

Questa tecnica è conosciuta colloquialmente nel mondo SQL come "sottoclasse". Per un esempio funzionante (sintassi di SQL Server ma facilmente adattabile a MS Access), vedere Blog di David Porta. .

Nel tuo scenario, gli elementi di dati comuni a tutti i commenti sarebbero nella tabella dei commenti; qualcosa di specifico per ogni tipo sarebbe in tabelle specializzate come PhotoComments, ecc. Nota che l'FK dovrebbe essere il composto a due colonne dell'ID più il tipo, qualcosa che è spesso trascurato ma è essenziale per l'integrità referenziale qui ad es. non vuoi che qualcosa digitato come un commento fotografico appaia nella tabella PersonComments.

Altri suggerimenti

Credo che molte persone facciano meta-table per questo genere di cose. Praticamente esattamente come l'hai descritta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top