C'est formidable que vous preniez le temps de comprendre, classer et modéliser les données avec lesquelles vous traitez, car, d'après mon expérience personnelle, tout cela rend le processus de développement plus facile et très flexible pour les changements futurs. Et je suis certain que vous en êtes déjà conscient.
Modèle de données préliminaire et règles métier supposées
J'ai défini une liste de règles métier que j'ai assumée après avoir lu votre question et examiné de près vos schémas, afin de décrire ma compréhension de vos spécifications. Après avoir défini une telle liste, j'ai dérivé un modèle de données IDEF1X [1] que j'ai décidé de télécharger en tant que document .PDF dans une plate-forme externe (Dropbox), car en raison de son format, ce modèle de données ne s'intègre pas bien dans une image intégrée. Ces deux instruments vont être utiles comme références pour certains points importants que j'énumère ci-dessous dans la section intitulée Aspects à résoudre afin d'avancer .
Voici d'abord le…
Puisque ce n'est que cela, préliminaire, le considérer comme un moyen de nous aider à réaliser le modèle de données final souhaité.
Règles commerciales supposées
Ce modèle de données préliminaire est dérivé d'un ensemble de règles métier (déduit de votre question) que j'énumérerai comme suit:
Organisations et profils
Notez que cela Profile
est actuellement compris comme synonyme de Person
.
- An
Organization
est un ami d' un à plusieurs Profiles
.
- An
Organization
est un ami d' un à plusieurs Organizations
.
- An
Organization
est membre d' un à plusieurs Organizations
.
- A
Profile
est membre d' un à plusieursOrganizations
.
- A
Profile
est un ami d' un à plusieurs Profiles
.
- A
Profile
est membre d' un à plusieurs Profiles
.
Lieux et adresses
- Un
Organization
possède un à plusieurs Locations
.
- A
Location
est classé par un à plusieurs LocationTypes
( un seul à un moment donné).
- A
Location
peut avoir un à plusieurs Addresses
( un Physical
, un pour Shipping
, l' un pour Billing
, ou un qui sert tous ces buts, ou un qui combine deux buts et une autre qui sert seulement un d'entre eux).
Un Address
peut être conservé par un-à-plusieurs Profiles
ou, autrement dit, un Profile
conserve un-à-plusieurs Addresses
.
Un particulier Address
peut être utilisé par un à plusieurs Profiles
(servant Physical
pour un Profile
, utilisé pour Billing
par un autre , etc.). Ainsi, un Address
fonctionne de manière similaire pour Locations
et Profiles
.
- Ainsi, un individu
Address
peut être, en même temps , de type Physical
, Shipping
et Billing
.
Lieux et rôles
- A
Location
ouvre un à plusieurs Roles
.
- Un
Role
peut être effectué en un à plusieurs Locations
.
- Un
Profile
(une fois qu'il a été défini comme Member
d'un Organization
) peut effectuer un à plusieurs Roles
, en un à plusieurs Locations
(mais un seul spécifique Role
à chacun Location
à un moment donné, c'est-à-dire jamais deux ou plus Roles
en même temps ).
Aspects à résoudre pour aller de l'avant
Afin de continuer à progresser dans la résolution de votre modèle de données, voici une liste de points pertinents qui, une fois que nous les aurons élaborés, nous aideront à atteindre cet objectif:
J'ai supposé que le terme Profile
dans votre contexte a une signification similaire (ou la même) que celle de Person
, mais il pourrait être un peu différent. De cette façon, diriez-vous que, dans votre scénario, les entités Organization
et Person
les sous-types de Profile
?
Un Profile
(ou Person
) peut-il posséder un à plusieurs EmailAddresses
, ou un Profile
(ou Person
) est-il fixé à exactement un EmailAddress
?
Souhaitez-vous donner la possibilité à un Organization
d'être contacté via Telephone
et Email
, ou souhaitez-vous restreindre cela pour qu'il ne soit possible que pour un Profile
(ou Person
)?
Je suppose que a Location
est fixé à exactement l'un Address
des types Physical
, est-ce correct?
Est-il possible que a Location
soit partagé par un à plusieurs différents Organizations
ou , sinon, un Location
peut appartenir à un seul Organization
?
Vous avez déclaré via des commentaires que le fait d'être un Member
et un Friend
est le même. Comme vous pouvez le voir dans mon modèle de données préliminaire proposé, je vous ai suivi les spécifications d'origine et décrit toutes les combinaisons possibles d'appartenance et d'amitié entre Organization
et Profile
(ou Person
) dans différentes entités car je pense que cela peut être utile dans l'effort de définir le meilleur possible structure pour cette partie de votre scénario. Dans ce sens:
- Je suppose que la déclaration
an Organization is a Member of another Organization
a des effets différents de la déclaration a Profile (or Person) is a Member of an Organization
concernant l'entité appelée Location
.
- Comme vous pouvez le voir dans le modèle de données, je pense que le
Role
de Owner
n'est valable pour un Organization
et, pour moi, le valide Roles
pour un Profile
(ou Person
), à l' intérieur d' un Location
sont Admin
et Member
. Que pensez-vous de tout cela? Puisque vous êtes en contact direct avec les règles commerciales applicables à votre situation, vous devez me dire si mes hypothèses sont correctes.
Un Profile
(ou Person
) peut-il jouer différent Roles
à l'intérieur d'un même Location
? c'est-à-dire, un peut-il Person
être en même temps le Admin
et aussi un Member
du même Location
? Quelles sont les règles à cet égard?
Je pense que le même Profile
(ou Person
) peut jouer différemment Roles
dans différents Locations
. Par exemple: Un Profile
(ou Person
) spécifique est "Admin" dans Location
"1", et ce même Profile
(ou Person
) est un " Member
" dans Location
"2", en même temps. Ai-je raison?
Est-il possible pour un particulier Location
d'avoir différents LocationTypes
en même temps, ou un individu est-il Location
fixé pour en tenir exactement un LocationType
?
L'attribut Organization.Website
représente- t-il l' adresse du site Web d'une organisation particulière, telle que «dba.stackexchange.com»?
Si Profile
«1» (compris comme Person
) est un Member
(ou Friend
) de Profile
«2», est-il possible pour Profile
«1» d'effectuer un Role
dans une Location
propriété de Profile
«2»? Je considère que de tels scénarios ne sont valables que pour les relations entre un Organization
et un Member
Person
donc, qu'en pensez-vous?
De la même manière, si Organization
«1» est un Member
(ou Friend
) de Organization
«2», est-il possible pour Organization
«1» de réaliser un Role
dans une Location
propriété de Organization
«2»? Encore une fois, je pense que ce genre de scénarios ne sont valables que pour les relations entre un Organization
et un Member
Person
, est-ce correct?
À cet égard - pendant que j'écris ces questions - je pense qu'il serait raisonnable de dire qu'il n'y a que trois types de relations différentes impliquant Organizations
et Persons
, et nous pouvons définir:
- a) La relation entre un
Organization
et un en Person
tant que « Membership
».
- (b) La relation entre un
Person
et un autre différent Person
de « Friendhip
».
- (c) Nous n'avons pas encore trouvé de nom significatif pour décrire la relation entre un individu
Organization
et un autre différent Organization
.
- Alors, faites-moi savoir ce que vous pensez des points a), b) et c).
Est-il possible pour un Organization
d'être un Friend
(ou un Member
) d' un à plusieurs différent Organizations
en même temps? Ou il est seulement possible pour un Organization
d'avoir seulement une relation avec exclusivement un autreOrganization?
Modèle de données successives illustrant la première avancée
En tenant compte de vos réponses et résolutions aux aspects en suspens que j'ai énumérés ci-dessus, j'ai créé ce qui suit…
Bien que je ne me sente pas encore très à l'aise avec lui, ce nouveau modèle de données exprime les règles commerciales suivantes:
- A
Profile
est soit un, Organization
soit un Person
. [2]
- Un
Profile
peut être l'ami offrant d' un à plusieurs FriendProfiles
, et un Profile
peut être l'ami qui accepte d' un à plusieurs FriendProfiles
. [3]
- Un
Location
peut être composé d' un à plusieurs Locations
. [4]
Réponses à vos commentaires spécifiques ultérieurs
C'est vraiment intéressant pour moi de noter / aggraver la séparation des préoccupations [par exemple LocationAddress et ProfileAddress] - car je voulais évidemment me précipiter et les maintenir toutes sans les bonnes relations [drôle, cela ne me semblait pas bien avec mon ERD d'origine].
Oui, c'est une bonne comparaison, bien que je n'appellerais pas cela une séparation des préoccupations (qui est, certainement, un principe fondamental de la programmation et de la conception d'applications), car ce terme se rapporte généralement à la phase de développement d'applications et nous nous trouvons actuellement dans le stade de compréhension des données et de conception de leur structure logique.
D'après mon expérience personnelle, je considère que cette phase a à voir avec la mise des choses significatives dans leur contexte entier, elle a à voir avec les associations qui existent entre les différentes entités qui sont pertinentes dans le scénario d'intérêt particulier, puis illustrant ces éléments dans un modèle de données. Dans le cas spécifique sur lequel vous commentez, l' Address
entité peut avoir différents types de connexions avec d'autres entités, une avec Profile
et une autre avec Location
.
Et, oui, quand quelque chose ne se sent pas bien ou naturel , cela peut bien être un signe qu'il faut faire plus d'efforts pour comprendre les données pertinentes. De cette manière, l' Address
entité est l'une des choses que je considère comme nécessitant plus d'attention, car je pense que la relation entre un Profile
et un Address
pourrait être gérée au moyen de l' Location
entité (du fait que chacun Location
doit avoir au moins un physique Address
), nous pourrions donc rejeter l' ProfileAddress
entité associative représentée dans le dernier modèle, mais vous devez continuer à analyser ces points et me faire part de vos idées.
De plus, est-il courant dans IDEF1X de modifier les dénotions PK / FK dans les entités pour une meilleure lisibilité [par exemple, ProfileId - LocationOwnerProfileId]?
Oui, c'est une remarque très intelligente de votre part, car IDEF1X recommande l'utilisation de noms de rôles pour dénommer les CLÉS ÉTRANGÈRES, afin de saisir la signification de ces attributs en fonction de l'entité dans laquelle ils sont utilisés. Il convient également de noter que cela est également fortement lié au concept de migration des clés primaires . En fait, l'utilisation des noms de rôle précède IDEF1X, car il a été initialement présenté par le Dr EF Codd dans son texte fondateur de 1970. De cette manière, on peut clairement voir la fidélité que la norme IDEF1X garde envers le modèle relationnel .
Je serais intrigué d'apprendre ce que vous n'aimez pas particulièrement / sentez-vous que cela ne modélise pas, avec / dans la solution?
Outre les détails déjà décrits ci-dessus à propos de l' Address
entité, je ne sais pas si les Roles
faits effectués par un donné Profile
dans un particulier Location
sont équivalents pour un Organization
ou un Person
. De mon point de vue, un Person
premier doit être associé à un Organization
, et ensuite ce Organization
serait nommé Person
pour effectuer un Role
dans un particulier Location
, mais vous connaissez mieux le scénario, donc ces règles peuvent être inutiles. À cet égard, je vais insister sur le fait qu'il serait très utile pour moi de savoir la description contextuelle ou sens que les futurs utilisateurs de cette structure de données donnent à Organization
, Profile
etLocation
, mais je comprends que cela peut être considéré comme une information confidentielle, ce serait donc une limitation.
Avec la structure actuelle, il semble que tout le monde ( Organization
ou Person
) peut être lié à n'importe qui (encore une fois, Organization
ou Person
) et peut être / faire n'importe quoi ( Role
) n'importe où ( Location
) mais, perharps, c'est précisément ce que vous et les utilisateurs attendez de cette base de données , pour lesquels vous fournirez bien entendu des contraintes bien définies. Si tel est le cas, nous fournissons presque une solution finale. Puisque, naturellement, votre opinion est décisive dans cette situation, vous devez également analyser ces idées et me faire part de vos conclusions afin que nous puissions prendre les dernières mesures.
Deuxième avance réalisable
Malheureusement, la communication s'est arrêtée il y a quelques semaines, je suppose à cause des engagements de travail que vous devez respecter, ce qui est tout à fait raisonnable. J'aurais été beaucoup plus content si nous avions développé un modèle plus stable et robuste mais, en raison de nos interactions précédentes, je peux supposer que j'ai pu vous orienter dans la bonne direction.
En plus de ce qui a déjà été présenté dans ce processus de questions et réponses, je considère que fournir une nouvelle progression à partir des modèles de données précédents peut être utile pour d'autres chercheurs ayant un problème similaire. J'ai donc créé le…
Modèle de données préliminaire des organisations et des profils - Deuxième avancée
Comme on peut le voir dans un tel modèle de données, j'ai supprimé la relation plusieurs-à-plusieurs que j'ai décrite dans les modèles précédents entre Profile
et Address
, car une donnée Profile
est déjà liée à un-à-plusieurs Addresses
via sa propriété Locations
.
Un autre changement qui est illustré dans cette nouvelle avancée est le fait qu'elle inclut désormais la possibilité qu'une donnée Location
puisse appartenir à un à plusieurs Profiles
. Par conséquent, j'ai changé la Location
CLÉ PRIMAIRE (en supprimant l' LocationOwnerProfileId
attribut), puis ajouté une entité associative ( plusieurs à plusieurs ) qui se rapporte Profile
à Location
.
Remarques
1. IDEF1X est une technique de modélisation de données hautement recommandable qui a été définie comme norme en décembre 1993 par le National Institute of Standards and Technology ( NIST ) des États-Unis .
2. Il s'agit d'une occurrence d'un cluster (super) type-sous-type . Au cas où vous seriez intéressé, voici une réponse dans laquelle je traite de manière plus détaillée ce type de relations.
3. Un exemple d'une relation hiérarchique plusieurs-à-plusieurs , et est très similaire à la structure qui a donné une solution définitive au «problème d'explosion des pièces» . Une telle solution a bien sûr été introduite par le Dr Edgar Frank Codd dans son article de 1970 extrêmement influent «Un modèle relationnel de données pour les grandes banques de données partagées» .
4. En tant que tel, il s'agit d'un exemple de relation hiérarchique un-à-plusieurs (ou plusieurs-à-un) .