Qual è il modo migliore per creare una tabella Una tabella HABTM Una relazione per un'applicazione CakePHP?

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

  •  03-07-2019
  •  | 
  •  

Domanda

Ho la necessità di creare la funzionalità per consentire ai miei utenti registrati di associarsi ad altri usi e creare una famiglia. Le tabelle del mio database sono simili al seguente:

db.persons - (Bob, Jane, Timmy, ecc.)

  • id
  • nome
  • e-mail

db.persons_persons

  • id
  • person__id_parent
  • person_id_child
  • relationtype_id

db.relationtypes - (coniuge, figlio, nipote, ecc.)

  • id
  • nome

Con questa struttura, dovrei essere in grado di specificare che Bob è un coniuge di Jane nella tabella persons_persons. Il record in db.persons_persons sarebbe simile a (psuedo):

ID | person_parent | person_child | relationtype
1  | Bob           | Jane         | Spouse
2  | Bob           | Timmy        | Child

Mi rendo conto che ciò potrebbe causare una frammentazione dei dati poiché se Bob e Jane sono sposati, un figlio dell'uno dovrebbe essere associato all'altro. Tuttavia questa non è la mia domanda. La mia domanda è se questa configurazione del database sia o meno "corretta" per l'uso in un'applicazione cakePHP.

È stato utile?

Soluzione

In primo luogo, CakePHP fletterà automaticamente una tabella people in un controller people e un modello person , quindi non è necessario chiamare persone . Quindi chiamerei la tabella di ricerca relazioni anziché persons_persons .

Chiamerei i campi nella tabella delle relazioni person_id , relationship_id e relationship_type_id , quindi aggiungerei un carattere di sottolineatura nel tuo relazione tipo nome tabella in modo che diventi tipo_ relazione .

Penso che questo sia più semantico.

Puoi ancora utilizzare un'associazione hasAndBelongsToMany e utilizzare l'automagic " con " associazioni offerte da CakePHP (solo 1.2) per accedere ai dati aggiuntivi nella tabella HABTM per il tipo di relazione.

Tuttavia, sarei tentato di usare:

  • Person ha molte Relation
  • Relazione appartiene a Persona , Relazione , RelationType

Nella tua app, la relazione di qualcuno è implicita nella relazione di qualcun altro con loro? Cioè se trovi Person.id = 1 potresti ottenere tutte le loro relazioni, ad es. Person.id 2, 3 e 4. Ma se trovi Person.id 2, non otterrai automaticamente Person.id = 1, a meno che non ci fosse un altro record nella tabella delle relazioni che rappresentasse quella relazione.

Per raggiungere questo obiettivo, puoi impostare un'altra associazione:

  • Person ha molte relazione1 con foreignKey person_id
  • Person ha molte relazione2 con foreignKey relation_id
  • Relazione appartiene a Persona , Relazione , RelationType

Nota, puoi ottenere questa doppia relazione anche con HABTM.

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