Domanda

Sto usando un ORM (SQLAlchemy, ma la mia domanda è piuttosto agnostica) per modellare una relazione molti-a-molti tra una classe genitore e i suoi figli .. Mi chiedevo, quale sarebbe un modo semplice per esprimere il concetto "uno dei bambini è quello predefinito / principale"?

Ad esempio, dovrei insistere su quanto segue:
Questa istanza di Persona ha l'indirizzo X e Y, il principale è Y.

L'ho visto implementato usando un "medio" classe come " PersonAddressRelation " che conterrebbe "Persona", "Indirizzo" e il "principale" bandiera, ma penso che appaia un po 'ingombrante .. C'è un modo migliore?

È stato utile?

Soluzione

Il modo più semplice sarebbe quello di avere una tabella join, PersonAddressRelation e anche una colonna DefaultAddress nella tabella Person che digiti nella tabella Address.

Altri suggerimenti

Un paio di osservazioni.

  • Le relazioni M: N non specificano 'parent' e 'child', in quanto non esiste un parent o un child: ci sono semplicemente due entità che hanno una relazione m: n tramite una terza entità (l'entità intermedia) .

  • 'Indirizzo' non è in genere un tipo di entità valido, poiché semanticamente non ha identità, simile a un 'nome' non ha identità (nome, cognome). Vedrai questo quando guarderai al riutilizzo di un'istanza di entità di tipo Indirizzo: non lo farai in generale. (sebbene riutilizzerai un'istanza dell'entità cliente, ad esempio, quando il cliente ha più ordini)

  • Si desidera specificare un attributo sulla relazione M: N (impostazione predefinita), poiché appartiene a questa. Ciò significa che la relazione stessa costituisce un'entità (che è l'entità intermedia, spesso ha solo due campi FK che formano il PK). Questa è chiamata "relazione oggettivata", poiché la relazione stessa è vista come un'entità. Altri esempi di questo sono Employee m: n Department e si desidera specificare la Data di avvio di un dipendente per un dipartimento per cui il dipendente lavora.

Quindi in generale: crea l'entità intermedia, come in generale dovrebbe essere lì, e aggiungi l'attributo lì. In questo caso particolare con Indirizzo, assicurati di riutilizzare le istanze di Indirizzo tra entità correlate (Persona). In caso contrario, unisci indirizzo con persona OPPURE se una persona può avere più indirizzi, crea una semplice relazione 1: n tra persona - indirizzo, per normalizzarla, sebbene non abbiate paura di unire i dati dell'indirizzo nell'entità a cui è correlata , poiché spesso i dati dell'indirizzo non vengono realmente riutilizzati (quindi la relazione m: n in realtà non è presente: non esiste un'istanza di indirizzo correlata a istanze di più persone.

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