Comment sont super et le sous-type de relations dans ER diagrammes représentés comme des tables?
Je suis en train d'apprendre comment interpréter des Diagrammes Entité-Relation dans SQL DDL déclarations et je suis confondu par des différences dans la notation. Considérons un disjoints relation comme dans le diagramme suivant:
Serait-ce être représentée comme:
- Véhicule, 2RM et 4RM tables (2RM et 4RM serait point à la pharmacocinétique du Véhicule); ou
- SEULEMENT le 2RM et 4RM tables (et PAS de Véhicule de table), qui feraient double emploi avec ce que les attributs du Véhicule aurait eu?
Je pense que ce sont d'autres façons d'écrire la relation:
Je suis à la recherche d'une explication claire de la différence en ce qui concerne ce que les tables que vous finirais avec pour chaque diagramme.
Dans la Base de données Relationnelle, c'est simple, straight-forward Exclusif sous-type exigence. UML ne peut pas être utilisé pour définir Rbds, elle n'a tout simplement pas de la notation ou de la richesse de IDEF1X. Malheureusement, le OO/ORM de la foule sont désemparés sur Rbds et IDEF1X. Généralisation-Spécialisation ne couvre pas de manière adéquate, pas de modèle ou de la méthode est donnée. Toutes les contraintes nécessaire, peuvent être mis en œuvre dans SQL,sans la folie de circulaire [dupliquer] références ou en Différé à la Vérification des contraintes ou "superkeys* ou dupliquer les indices.
OriginalL'auteur xingyu | 2012-08-20
Vous devez vous connecter pour publier un commentaire.
ER Notation
Il y a plusieurs ER les notations. Je ne suis pas familier avec celui que vous utilisez, mais il est assez clair que vous essayez de représenter un sous-type (aka. l'héritage, la catégorie, la sous-classe, la généralisation de la hiérarchie...). C'est le relationnel cousin de la programmation orientée objet à l'héritage.
Lors de sous-typage, vous sont généralement intéressés à la suite de décisions de conception:
Vehicle
existent sans également2WD
ou4WD
?1Vehicle
être les deux2WD
et4WD
?2Bike
ou unPlane
(etc...) pourrait être ajouté plus tard pour le modèle de base de données?L'Ingénierie de l'Information de la notation de la distinction entre inclusion et d'exclusion du sous-type de relation. IDEF1X notation, d'autre part, n'est pas (directement) de reconnaître cette différence, mais il ne se différencient entre complètes et incomplètes sous-type (IE n'est pas).
Le diagramme suivant de la ERwin Méthodes De Guide (Chapitre 5, sous-type de Relations) illustre la différence:
Ni IE ni IDEF1X directement autoriser abstrait vs concret parent.
Représentation Physique
Malheureusement, en pratique, les bases de données ne sont pas directement en charge de l'héritage, de sorte que vous aurez besoin de transformer ce schéma de vraies tables. Il y a généralement 3 approches:
2WD
et4WD
les véhicules ayant le même IDENTIFIANT). Pouvez facilement appliquer inclusive vs exclusive des enfants et abstrait vs concret parent (en variant juste le VÉRIFIER).Comme vous pouvez le voir, la situation est moins idéale, vous aurez besoin de faire des compromis en ce quelle que soit l'approche que vous choisissez. L'approche (3) devrait être votre point de départ, et ne choisissez l'une des options si il ya une raison impérieuse de le faire.
1 je suppose que c'est ce que l'épaisseur de la ligne des stands pour dans vos diagrammes.
2 je suppose que c'est ce que la présence ou l'absence de "disjoints" signifie dans vos diagrammes.
OriginalL'auteur Branko Dimitrijevic
Généralement quand tu fais un Super-type/Sous-type de relation dans votre conception de base de données, vous devez créer une table séparée pour votre type d'Entité (Super-type) et des tables séparées pour votre Entité Spécialisée version/s (Sous-Type) disjoints ou non. Dans votre cas, vous aurez besoin de créer une table pour le VÉHICULE et d'une clé primaire et certains attributs communs ou partagés par tous les Sous-types. Ensuite, vous aurez besoin pour créer des tables séparées pour les 2RM et 4RM avec des attributs spécifiques à ces tables. Par exemple
ensuite, vous pouvez lancer une requête sur les tables en utilisant des Jointures SQL
OriginalL'auteur curzedpirate
Ce que d'autres intervenants, a déclaré, en plus de la suite qui va dans les clés primaires pour la sous-classe des tables.
Votre cas ressemble à une instance du modèle de conception connue comme “la Généralisation Spécialisation” , ou Gen-Spec pour faire court. La question de savoir comment gen-spec à l'aide de tables de base de données arrive tout le temps dans la.
Si vous avez été la modélisation gen-spec dans un OOPL tels que Java, vous pouvez utiliser l'héritage de classes facilité à prendre soin des détails pour vous. Il vous suffit de définir une classe pour prendre soin de la généralisation d'objets, puis de définir une collection de sous-classes, une pour chaque type de spécialisés de l'objet. Chaque sous-classe permettrait d'étendre la généralisation de la classe. Il est facile et simple.
Malheureusement, le modèle de données relationnel n'ont pas d'héritage de classes intégrées, et la base de données SQL systèmes n'offrent pas une telle installation, à ma connaissance. Mais vous n'êtes pas hors de la chance. Vous pouvez concevoir vos tables de gen-spec dans une manière qui est parallèle à la structure de classe de la programmation orientée objet. Ensuite, vous aurez à prendre des dispositions pour mettre en œuvre votre propre mécanisme d'héritage lorsque de nouveaux éléments sont ajoutés à la généralisation de la classe. Suivent des détails.
De la structure de classe est assez simple, avec une table pour le gen classe et une table pour chaque spec sous-classe. Voici une belle illustration, de Martin Fowler site web. La Classe De L'Héritage De Table. Noter que dans ce schéma, le joueur de Cricket est à la fois une sous-classe et une super-classe. Vous devez choisir les attributs à aller dans les tables. Le schéma montre un exemple d'attribut dans chaque table.
Le délicat détail la manière dont vous définissez les clés primaires de ces tables. La gen table de classe devient une clé primaire dans la manière habituelle (à moins que ce tableau est une spécialisation d'une autre généralisation, comme les Joueurs de cricket). La plupart des concepteurs de donner la clé primaire d'un nom standard, comme “Id”. Ils utilisent la fonctionnalité de numérotation automatique pour remplir le champ Id. La spécification de la classe de tableaux obtenir une clé primaire, ce qui peut être nommé “Id”, mais la numérotation automatique fonctionnalité n'est pas utilisée. Au lieu de la clé primaire de chaque sous-classe de la table est contraint de se référer à la clé primaire de la généralisation de la table. Cela rend chaque spécialisée clés primaires de la clé étrangère ainsi que d'une clé primaire. Notez que dans le cas de Joueurs de cricket, le champ Id de référence le champ Id dans les Joueurs, mais le champ Id dans les Quilleurs référence le champ Id dans les Joueurs de cricket.
Maintenant, lorsque vous ajoutez de nouveaux éléments, vous avez pour maintenir l'intégrité référentielle, Voici comment.
Vous d'abord insérer une nouvelle ligne dans le tableau, fournissant des données pour l'ensemble de ses attributs, à l'exception de la clé primaire. La numérotation automatique mécanisme génère une clé primaire unique. Ensuite, vous insérez une nouvelle ligne dans le spec de table, y compris les données pour l'ensemble de ses attributs, y compris la clé primaire. La clé primaire est une copie de la nouvelle marque de la clé primaire qui vient d'être généré. Cette propagation de la clé primaire peut être appelé “pauvre homme héritage”.
Maintenant, quand vous voulez toutes les données généralisé avec l'ensemble des données spécialisée à partir d'une seule sous-classe, tout ce que vous avez à faire est de joindre les deux tables sur la commune de les touches. Toutes les données qui ne sont pas liés à la sous-classe en question d'abandon de la jointure. Il est lisse, facile, et rapide.
OriginalL'auteur Walter Mitty
Il n'y a pas toujours une seule façon de mettre en œuvre toute particulière du modèle de données. Souvent, il y a une transformation qui se produit lorsque vous vous déplacez d'un modèle logique pour un modèle physique.
Standard SQL ne dispose pas d'un moyen propre à faire respecter disjoints sous-type de contraintes.
Si votre objectif est de faire valoir que de nombreux de votre modèle de règles que possible en utilisant le schéma, puis l'approche standard pour la mise en œuvre de votre modèle est d'utiliser un tableau pour le supertype et un pour chacun des sous-types. Cela garantit que seuls applicables attributs sont utilisés pour chaque entité.
Il est plus ou moins standard SQL truc pour l'application de la disjoints contrainte. Ça met les gens parce qu'elle viole les règles de normalisation dans un peu d'importance. Pourtant, certaines personnes trouvent que la technique esthétiquement offensive puisqu'il y a une violation technique de 2FN.
Cette technique consiste en l'ajout d'un partitionnement attribut pour le supertype et y compris ce partitionnement attribut dans chaque sous-type, ajoutant à la clé primaire de la sous-type. Avec la vérification des contraintes qui imposent des valeurs spécifiques pour le partitionnement des attributs, ce qui assure que chaque entité peut avoir au plus un sous-type. La technique est décrite en détail dans de nombreux endroits, tels que ce blog.
étant donné que cela peut être fait en pur SQL "propre" sans la duplication massive, il a reculé et a dit qu'il n'a pas l'inventer. La violation de la Normalisation est "sans importance" que lorsque la pertinence de la db de la conception et de la valeur de la Normalisation n'est pas connue; rien de "l'esthétique". La bonne méthode (je ne vais pas suggérer qu'il est "standard", et nous savons déjà qu'il n'est pas connu pour les masses) est cette réponse. Une seule sous-type de mises en œuvre de manière déclarative & garanti par le serveur (pas le code de l'application). Pas de double emploi; aucun autre indice par sous-type.
Je ne vais pas argumenter avec vous sur le potentiel de l'utilisation légitime du mot puisque c'est DBA.SE pas EL&U. SE. Je vais proposer qu'après 25 ans d'être payé pour le développement d'applications d'entreprise, je pense que j'ai beaucoup de "la véritable connaissance & expérience". Comme pour abominations, je dirai qu'au lieu de regarder le monde dans extrémistes termes mon expérience me dit que les règles du pouce sont bien, mais il est préférable de comprendre le raisonnement derrière eux et d'appliquer ce raisonnement au lieu de suivre la règle, sans réfléchir pourquoi.
OriginalL'auteur Joel Brown