È fantastico che tu stia prendendo il tempo per comprendere, classificare e modellare i dati di cui ti stai occupando poiché, per esperienza personale, tutto ciò rende l'intero processo di sviluppo più semplice e molto flessibile per i cambiamenti futuri. E sono abbastanza sicuro che ne sia già consapevole.
Modello di dati preliminari e regole aziendali assunte
Ho definito un elenco di regole aziendali che ho assunto dopo aver letto la tua domanda e aver esaminato attentamente i tuoi diagrammi, al fine di descrivere la mia comprensione delle tue specifiche. Dopo aver definito tale elenco, ho derivato un modello di dati IDEF1X [1] che ho deciso di caricare come documento .PDF in una piattaforma esterna (Dropbox), poiché a causa del suo formato questo modello di dati non si adatta bene a un'immagine incorporata. Questi due strumenti saranno utili come riferimenti per alcuni punti importanti che enumererò di seguito nella sezione intitolata Aspetti da risolvere per continuare ad andare avanti .
Innanzitutto, ecco il ...
Dal momento che è solo preliminare, considerarlo come un mezzo che ci aiuta a realizzare il modello di dati finali desiderato.
Regole aziendali presunte
Tale modello di dati preliminari è stato derivato da una raccolta di regole aziendali (desunte dalla tua domanda) che enumererò come segue:
Organizzazioni e profili
Si noti che Profile
attualmente è inteso come sinonimo di Person
.
- An
Organization
è un amico di uno a molti Profiles
.
- An
Organization
è un amico di uno a molti Organizations
.
- An
Organization
è un membro di uno-a-molti Organizations
.
- A
Profile
è un membro di uno-a-moltiOrganizations
.
- A
Profile
è un amico di uno a molti Profiles
.
- A
Profile
è un membro di uno-a-molti Profiles
.
Posizioni e indirizzi
- Uno
Organization
possiede uno-a-molti Locations
.
- A
Location
è classificato da uno a molti LocationTypes
( solo uno in un dato momento).
- Un
Location
può avere uno-a-molti Addresses
( uno Physical
, uno per Shipping
, uno per Billing
, o uno che serve scopi tutti detti, o uno che combina due scopi ed altri che serve solo uno di essi).
Un Address
può essere tenuto da uno a molti Profiles
o, in altre parole, uno Profile
mantiene uno a molti Addresses
.
Uno specifico Address
può essere utilizzato da uno-a-molti Profiles
(che serve come Physical
per uno Profile
, essendo utilizzato per Billing
da uno diverso , ecc). Quindi, Address
funziona in modo simile per Locations
e Profiles
.
- Così, un individuo
Address
può essere, allo stesso tempo , di tipo Physical
, Shipping
e Billing
.
Posizioni e ruoli
- A
Location
apre uno a molti Roles
.
- A
Role
può essere eseguito in uno-a-molti Locations
.
- A
Profile
(una volta impostato come Member
di Organization
) può eseguire uno-a-molti Roles
, in uno-a-molti Locations
(ma solo uno specifico Role
in ciascuno Location
in un determinato momento, cioè mai due o più Roles
contemporaneamente ).
Aspetti da risolvere per andare avanti
Per continuare ad avanzare nella risoluzione del tuo modello di dati, ecco un elenco di punti rilevanti che, una volta elaborati, ci aiuteranno a raggiungere questo obiettivo:
Ho ipotizzato che il termine Profile
nel tuo contesto abbia un significato simile (o uguale) a quello di Person
, ma potrebbe essere un po 'diverso. In questo modo, diresti che, nel tuo scenario, le entità Organization
e i Person
sottotipi di Profile
?
Può un Profile
(o Person
) proprio uno-a-molti EmailAddresses
, o è un Profile
(o Person
) fissata ad esattamente un EmailAddress
?
Vorresti fornire la possibilità Organization
di essere contattato tramite Telephone
e Email
, o vuoi limitare ciò per essere possibile solo per un Profile
(o Person
)?
Presumo che a Location
sia fissato esattamente a un Address
tipo Physical
, è corretto?
È possibile che uno Location
sia condiviso da uno a molti diversi Organizations
o , in caso contrario, Location
può essere posseduto da uno solo Organization
?
Hai dichiarato tramite commenti che il fatto di essere a Member
e a Friend
è lo stesso. Come puoi vedere nel mio modello di dati preliminari proposto, ti ho seguito le specifiche originali e ho illustrato tutte le possibili combinazioni di appartenenza e amicizia tra Organization
e Profile
(o Person
) in entità diverse poiché penso che possa essere utile nello sforzo di definire il migliore possibile struttura per quella parte del tuo scenario. In questo senso:
- Presumo che la dichiarazione
an Organization is a Member of another Organization
abbia effetti diversi rispetto alla dichiarazione a Profile (or Person) is a Member of an Organization
relativa all'entità chiamata Location
.
- Come puoi vedere nel modello di dati, penso che il
Role
di Owner
sia valido solo per un Organization
e, per me, il valido Roles
per un Profile
(o Person
), all'interno di un Location
are Admin
e Member
. Cosa ne pensi di tutto questo? Dato che sei in diretto contatto con le regole aziendali applicabili alla tua situazione, devi dirmi se i miei presupposti sono corretti.
Un Profile
(o Person
) può suonare diversamente Roles
nello stesso Location
? vale a dire, può Person
essere, allo stesso tempo, Admin
e anche uno Member
della stessa Location
? Quali sono le regole al riguardo?
Penso che lo stesso Profile
(o Person
) possa suonare diverso Roles
in diverso Locations
. Ad esempio: uno specifico Profile
(o Person
) è "Admin" in Location
"1", e questo stesso Profile
(o Person
) è un " Member
" in Location
"2", allo stesso tempo. Ho ragione?
È possibile che un particolare Location
sia diverso LocationTypes
allo stesso tempo, o un individuo è Location
fisso per tenerne esattamente uno LocationType
?
L'attributo Organization.Website
rappresenta l'indirizzo del sito Web di una determinata organizzazione, ad esempio "dba.stackexchange.com"?
Se Profile
"1" (inteso come Person
) è un Member
(o Friend
) di Profile
"2", è possibile che Profile
"1" esegua un Role
in un Location
posseduto da Profile
"2"? Ritengo che tali scenari siano validi solo per le relazioni tra un Organization
e un Member
Person
così, cosa ne pensi?
In modo simile, se Organization
"1" è un Member
(o Friend
) di Organization
"2", è possibile che Organization
"1" esegua un Role
in un Location
posseduto da Organization
"2"? Ancora una volta, penso che questo tipo di scenari siano validi solo per le relazioni tra an Organization
e a Member
Person
, è corretto?
A questo proposito, mentre scrivo queste domande, penso che sarebbe ragionevole dire che ci sono solo tre diversi tipi di relazioni che coinvolgono Organizations
e Persons
, e possiamo definire:
- (a) La relazione tra an
Organization
e a Person
come “ Membership
”.
- (b) La relazione tra a
Person
e un altro è diversa Person
da “ Friendhip
”.
- (c) Dobbiamo ancora trovare un nome significativo per descrivere la relazione tra un individuo
Organization
e un altro diverso Organization
.
- Fammi sapere cosa ne pensi di (a), (b) e (c).
È possibile che un Organization
sia uno Friend
(o uno Member
) di uno-a-molti diversi Organizations
allo stesso tempo? Oppure è possibile solo per Organization
avere un rapporto solo con uno diversoOrganization?
Modello di dati successivi raffigurante il primo anticipo
In attenzione alle tue risposte e risoluzioni agli aspetti in sospeso che ho elencato sopra, ho creato il seguente ...
Anche se non mi sento ancora abbastanza a mio agio con questo, questo nuovo modello di dati esprime le seguenti regole aziendali:
- Una
Profile
è sia un Organization
o una Person
. [2]
- A
Profile
può essere l'amico proponente dell'uno-a-molti FriendProfiles
, e Profile
può essere l'amico accettante dell'uno-a-molti FriendProfiles
. [3]
- A
Location
può consistere in uno-a-molti Locations
. [4]
Risposte ai tuoi commenti specifici successivi
È davvero interessante per me notare / aggravare la separazione delle preoccupazioni [es. LocationAddress e ProfileAddress] - perché ovviamente volevo correre e trattenerle tutte senza le relazioni corrette [stranamente, non mi andava bene con il mio ERD originale].
Sì, questo è un buon confronto, anche se non lo definirei separazione delle preoccupazioni (che è, certamente, un principio fondamentale nella programmazione e progettazione delle applicazioni), poiché questo termine appartiene comunemente allo stadio di sviluppo dell'applicazione e attualmente ci troviamo nella fase di comprensione dei dati e progettazione della sua struttura logica.
Dalla mia esperienza personale, ritengo che questa fase abbia a che fare con l'inserimento delle cose significative nel loro intero contesto, ha a che fare con il vedere le associazioni esistenti tra le diverse entità che sono rilevanti nel particolare scenario di interesse, e quindi raffigurante queste cose in un modello di dati. Nel caso specifico in cui stai commentando, l' Address
entità può avere diversi tipi di connessioni con altre entità, una con Profile
e una diversa con Location
.
E, sì, quando qualcosa non sembra giusto o naturale , potrebbe benissimo essere un segno che bisogna fare uno sforzo maggiore per comprendere i dati pertinenti. In questo modo, l' Address
entità è una delle cose che considero che necessita di maggiore attenzione, poiché penso che la relazione tra a Profile
e an Address
possa essere gestita tramite l' Location
entità (a causa del fatto che ognuno Location
deve avere almeno un fisico Address
), quindi abbiamo potuto respingere l' ProfileAddress
entità associativa raffigurato nel l'ultimo modello, ma è necessario continuare analizzando questi punti e fatemi sapere le vostre idee.
Inoltre, è pratica comune in IDEF1X cambiare le denotazioni PK / FK nelle entità per una migliore leggibilità [es. ProfileId - LocationOwnerProfileId]?
Sì, questa è un'osservazione molto intelligente da parte tua, poiché IDEF1X raccomanda l'uso di nomi di ruoli per denominare CHIAVI STRANIERE, al fine di acquisire il significato di tali attributi in base all'entità in cui viene utilizzato. Vale anche la pena notare che questo è anche fortemente correlato al concetto di migrazione delle chiavi primarie . È un dato di fatto, l'uso di nomi di ruoli precede IDEF1X, poiché è stato presentato in origine dal Dr. EF Codd nel suo testo seminale del 1970. In questo modo, si può vedere chiaramente la fedeltà che lo standard IDEF1X mantiene nei confronti del modello relazionale .
Sarei incuriosito dall'apprendere ciò che non ti piace / senti che non modella, con / nella soluzione?
Oltre ai dettagli già descritti sopra Address
sull'entità, non sono sicuro che il Roles
fatto che un dato Profile
in un determinato Location
sia equivalente a un Organization
o un Person
. Dal mio punto di vista, un Person
primo deve essere associato a un Organization
, e quindi questo Organization
nominerebbe detto Person
di eseguire un Role
in un particolare Location
, ma conosci meglio lo scenario, quindi queste regole potrebbero essere inutili. A questo proposito, ho intenzione di insistere sul fatto che sarebbe stato molto utile per me sapere la descrizione contestuale o significato che i futuri utenti di questa struttura dati per dare Organization
, Profile
eLocation
, ma capisco che queste potrebbero essere considerate informazioni riservate, quindi questa sarebbe una limitazione.
Con la struttura attuale, sembra che tutti ( Organization
o Person
) possano essere collegati a chiunque (di nuovo, Organization
o Person
) e possano essere / fare qualsiasi cosa ( Role
) ovunque ( Location
) ma, perharps, questo è precisamente ciò che tu e gli utenti vi aspettate da questo database , per il quale fornirai vincoli ben definiti, ovviamente. In questo caso, stiamo quasi fornendo una soluzione finale. Dato che, naturalmente, la tua opinione è decisiva in questa situazione, dovresti anche analizzare queste idee e quindi farmi conoscere le tue conclusioni in modo che possiamo compiere i passi finali.
Secondo anticipo fattibile
Sfortunatamente, la comunicazione si è interrotta poche settimane fa, immagino a causa degli impegni di lavoro che devi rispettare, il che è del tutto ragionevole. Sarei stato molto più contento se avessimo sviluppato un modello più stabile e robusto ma, a causa delle nostre interazioni precedenti, posso presumere che sono stato in grado di indicarti la giusta direzione.
Oltre a quanto è già stato presentato in questo processo di domande e risposte, ritengo che fornire una nuova progressione dai precedenti modelli di dati possa essere utile per altri ricercatori con un problema simile. Quindi, ho creato il ...
Modello preliminare di dati di organizzazioni e profili - Secondo avanzamento
Come si può vedere in tale modello di dati, ho rimosso la relazione molti-a-molti che ho rappresentato nei modelli precedenti tra Profile
e Address
, poiché un dato Profile
è già correlato a uno-a-molti Addresses
tramite la sua proprietà Locations
.
Un altro cambiamento che viene illustrato in questo nuovo anticipo è il fatto che ora include la possibilità che un dato Location
possa essere posseduto da uno a molti Profiles
. Di conseguenza, ho cambiato la Location
chiave primaria (respingendo LocationOwnerProfileId
l'attributo) e quindi aggiunto un ente associativo ( molti-a-molti ) che si riferisce Profile
con Location
.
Appunti
1. IDEF1X è una tecnica di modellizzazione dei dati altamente raccomandabile che è stata definita come standard nel dicembre 1993 dal National Institute of Standards and Technology ( NIST ) degli Stati Uniti .
2. Questa è un'occasione di un cluster (super) di sottotipo di tipo . Nel caso siate interessati, ecco una risposta in cui mi occupo in modo più dettagliato di questo tipo di relazioni.
3. Un esempio di relazione gerarchica molti-a-molti ed è molto simile alla struttura che ha dato la soluzione definitiva al "Problema di esplosione delle parti" . Tale soluzione fu, naturalmente, introdotta dal Dr. Edgar Frank Codd nel suo articolo del 1970 estremamente influente "Un modello relazionale di dati per grandi banche dati condivise" .
4. Come tale, questa è un'istanza di una relazione gerarchica uno-a-molti (o molti-a-uno) .