Grande tabella con integrità referenziale o tipizzazione del campo?

2

Sto usando un ORM (Propel) e PHP per creare oggetti e memorizzarli in un database. Quindi, sto affrontando un problema ricorrente e sono abbastanza sicuro che questo sia successo a qualcuno prima.

Il mio modello di dati è simile a questo:

Quindi la classe A ha bisogno di un riferimento a qualcosa dalla gerarchia di Clase Parent (classe astratta), questo non è il problema. L'idea alla base di queste soluzioni è che in futuro sarebbe molto facile creare nuove strategie. Ma ricorda che ho detto che sto usando un ORM per memorizzare informazioni nel database?

Bene, il database ha 3 tabelle: A_table , B_table e C_table . Quindi ecco che arriva la situazione:

A_table deve essere correlato alla strategia. Qual è il modo migliore per andare?

  1. Crea una tabella di riferimento del tipo di strategia, assalta un tipo in A_table e disponi di una relazione_id che è solo un utente con un valore (nessuna integrità referenziale di sorta)
  2. Crea un campo per strategia in A_table e consenti loro di essere nulli

Davvero in attesa di opinioni e perché il suo migliore o l'altro.

    
posta guiman 17.11.2011 - 15:46
fonte

1 risposta

1

Ho affrontato un problema simile, usando NHibernate come mio ORM. In quel caso, ho creato una tabella separata per Parent con solo una colonna Id in essa. Poi ho creato relazioni uno-a-uno tra B e Parent e C e Parent . Quindi, per ogni record in B o C c'è un record corrispondente in Parent . Lo fai rendendo le tue chiavi primarie in B e C anche chiavi esterne che fanno riferimento a Parent . Quindi potrei creare una normale relazione di chiave esterna tra A e Parent .

Questo ha 2 vantaggi:

  1. È facile aggiungere nuove strategie
  2. È facile aggiungere proprietà alla classe Parent , se necessario

Ovviamente, si finisce con un'altra tabella, ma ho scoperto che l'ORM ha reso tutto trasparente.

    
risposta data 17.11.2011 - 15:53
fonte

Leggi altre domande sui tag