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 Profileest actuellement compris comme synonyme de Person.
- An
Organizationest un ami d' un à plusieurs Profiles .
- An
Organizationest un ami d' un à plusieurs Organizations .
- An
Organizationest membre d' un à plusieurs Organizations .
- A
Profileest membre d' un à plusieursOrganizations .
- A
Profileest un ami d' un à plusieurs Profiles .
- A
Profileest membre d' un à plusieurs Profiles .
Lieux et adresses
- Un
Organizationpossède un à plusieurs Locations .
- A
Locationest classé par un à plusieurs LocationTypes ( un seul à un moment donné).
- A
Locationpeut 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 Addresspeut être conservé par un-à-plusieurs Profiles ou, autrement dit, un Profileconserve un-à-plusieurs Addresses .
Un particulier Addresspeut être utilisé par un à plusieurs Profiles (servant Physicalpour un Profile , utilisé pour Billingpar un autre , etc.). Ainsi, un Addressfonctionne de manière similaire pour Locationset Profiles.
- Ainsi, un individu
Addresspeut être, en même temps , de type Physical, Shipping et Billing .
Lieux et rôles
- A
Locationouvre un à plusieurs Roles .
- Un
Rolepeut être effectué en un à plusieurs Locations .
- Un
Profile(une fois qu'il a été défini comme Memberd'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 Profiledans 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 Organizationet Personles 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 Organizationd'être contacté via Telephoneet Email, ou souhaitez-vous restreindre cela pour qu'il ne soit possible que pour un Profile(ou Person)?
Je suppose que a Locationest fixé à exactement l'un Address des types Physical, est-ce correct?
Est-il possible que a Locationsoit partagé par un à plusieurs différents Organizations ou , sinon, un Locationpeut appartenir à un seul Organization ?
Vous avez déclaré via des commentaires que le fait d'être un Memberet un Friendest 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 Organizationet 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 Organizationa des effets différents de la déclaration a Profile (or Person) is a Member of an Organizationconcernant l'entité appelée Location.
- Comme vous pouvez le voir dans le modèle de données, je pense que le
Rolede Ownern'est valable pour un Organizationet, pour moi, le valide Rolespour un Profile(ou Person), à l' intérieur d' un Locationsont Adminet 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 Adminet aussi un Memberdu même Location? Quelles sont les règles à cet égard?
Je pense que le même Profile(ou Person) peut jouer différemment Rolesdans 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 Locationd'avoir différents LocationTypesen même temps, ou un individu est-il Locationfixé pour en tenir exactement un LocationType?
L'attribut Organization.Websiterepré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 Roledans une Locationpropriété de Profile«2»? Je considère que de tels scénarios ne sont valables que pour les relations entre un Organizationet un Member Persondonc, 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 Roledans une Locationpropriété de Organization«2»? Encore une fois, je pense que ce genre de scénarios ne sont valables que pour les relations entre un Organizationet 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 Organizationset Persons, et nous pouvons définir:
- a) La relation entre un
Organizationet un en Persontant que « Membership».
- (b) La relation entre un
Personet un autre différent Personde « Friendhip».
- (c) Nous n'avons pas encore trouvé de nom significatif pour décrire la relation entre un individu
Organizationet un autre différent Organization.
- Alors, faites-moi savoir ce que vous pensez des points a), b) et c).
Est-il possible pour un Organizationd'être un Friend(ou un Member) d' un à plusieurs différent Organizationsen même temps? Ou il est seulement possible pour un Organizationd'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
Profileest soit un, Organization soit un Person. [2]
- Un
Profilepeut être l'ami offrant d' un à plusieurs FriendProfiles , et un Profilepeut être l'ami qui accepte d' un à plusieurs FriendProfiles . [3]
- Un
Locationpeut ê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' Addressentité peut avoir différents types de connexions avec d'autres entités, une avec Profileet 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' Addressentité est l'une des choses que je considère comme nécessitant plus d'attention, car je pense que la relation entre un Profileet un Address pourrait être gérée au moyen de l' Locationentité (du fait que chacun Locationdoit avoir au moins un physique Address), nous pourrions donc rejeter l' ProfileAddressentité 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' Addressentité, je ne sais pas si les Rolesfaits effectués par un donné Profiledans un particulier Locationsont équivalents pour un Organizationou un Person. De mon point de vue, un Personpremier doit être associé à un Organization, et ensuite ce Organizationserait nommé Personpour effectuer un Roledans 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, ProfileetLocation, 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 ( Organizationou Person) peut être lié à n'importe qui (encore une fois, Organizationou 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 Profileet Address, car une donnée Profileest 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 Locationpuisse appartenir à un à plusieurs Profiles . Par conséquent, j'ai changé la LocationCLÉ PRIMAIRE (en supprimant l' LocationOwnerProfileIdattribut), 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) .