ERD - Wie eine Beziehung zwischen zwei Entitäten mit einer dritten Entität als „Attribut“ modellieren

StackOverflow https://stackoverflow.com/questions/4082286

Frage

Ich bin Modellieren eines Entity-Relationship-Diagramm und blieb stecken. Ich bin mir nicht sicher, ob meine Überlegungen sind falsch oder ERD nicht modell, was ich will:

Ich habe drei Einheiten: Mitarbeiter, Projekt und Tätigkeit. Es gibt eine Beziehung zwischen Mitarbeitern und Projekt: Mitarbeiter an einem Projekt arbeiten. Aber diese Mitarbeiter nicht nur an diesem Projekt arbeiten, kann er / sie hat ein Operationsfeld, die als eine Rolle gegeben. Aber ist es nicht eine Beziehung nur durch Attribute beschrieben? Wie kann ich so etwas wie „Ein Mitarbeiter arbeitet an diesem Projekt als ...“ machen? Natürlich habe ich ein RoleID als Attribut verwenden, wie ich es als eine Datenbank entwerfen würde, aber was ist die Beziehung in einem ERD?

War es hilfreich?

Lösung

Wie eine Beziehung ... Entität ... Attribut modellieren?

Bevor ich die Datenbank entwerfe ich das Problem als ein Entity-Relationship-Diagramm zu modellieren (Chen-Notation). In diesem Diagramm möchte ich, ohne einen Blick auf die Tasten und Zwänge eine Beziehung zwischen Mitarbeiter und Projekt erstellen, die folgen. Nachtrag: Ich weiß nur, die Beziehungen zwischen zwei Einheiten, die durch Attribute erweitert werden, aber wie kann ich modelliere diese „Drei-Entity-Relation“

?

Das ist völlig verständlich, und ganz richtig. Papier ist billig, Objekte in einer Datenbank ein wenig teurer zu ändern sind. Modell, um die Anforderung und halten Sie sie zu verbessern, bis Sie sicher sind, und implementieren.

Das Problem mit vielen Standorten ist, gibt es viele Tischler, die zwar gut gemeint, sehen jedes Problem wie ein Nagel, und liefern DDL, nicht die Modellierung Unterstützung angefordert. Was fehlt, ist Kontext und die Bedeutung, so dass das Endergebnis eine hieb- und stich schnelle Implementierung mit festen „Schlüssel“ ist aber ohne Kontext und Bedeutung. Modellierung ermöglicht es uns, verschiedene Aspekte zu modellieren, die für uns relevant sind, ohne Sorge darüber, was das wie in DDL aussehen würde.

Eine andere Art zu sagen, es ist, hat OMG eine Frage beantwortet wie modelliere ich „Ein Mitarbeiter arbeitet an diesem Projekt als ...“ in Isolation?; Ich bin Ihre ganze Frage in Zusammenhang zu beantworten.

Auf der logischen Ebene, many-to-many-Beziehungen sind korrekt. Solche Beziehungen keine anderen Überlegungen ist auf der physischen Ebene als assoziative Tabellen wiedergegeben. Aber auch hier ist es zu früh, das zu entscheiden, weil Sie noch die Modellierung des Kontextes und die Bedeutung der Beziehungen.

... noch ist es im Bereich der SO Abschlag Notation es zu schaffen. IME, Tools wie Oracle Designer generieren solcher Grafiken, nachdem Sie die Objekte erstellt haben

Unsinn. Die ganze Idee der Modellierung ist etwas auf dem Papier zu entwickeln und zu verbessern, Diagramme verwendet, lange bevor eine Zeile Code zu schreiben oder eine Plattform zu kaufen, oder DDL mit implementieren. Der Kommentar wird über lediglich Reverse-Engineering eine bestehende Datenbank, nachdem die Tatsache, die viele Produkte.

Beispiel für Modellierung, Progression

Verwenden Sie, was Symbole für Sie von Bedeutung sind, zu modellieren, was Sie brauchen. Natürlich sind weitere Standardsymbole universell verstanden. Hier ist ein
ERD für Sie
(Ich habe keine Ahnung, wie „SO Abschlags Notation“ eine Einschränkung stellt auf die Bereitstellung von vor-the-fact Modellierung Beratung). Ich habe ein Beispiel für die Progression zur Verfügung gestellt, dass können auftreten. Nichts ist „richtig“ oder „falsch“, es werden alle Bits von Papier; bis Sie entscheiden, welche Elemente sind es wert, zu bestätigen, und dann die nächste Progression möglich.

  1. Der Ausgangspunkt ist natürlich, einfach many-to-many-Beziehungen, dass Sie wissen einige Dinge über, wie pro Ihren Titel. eine fiktive Drei-Wege-Beziehung zu modellieren versuche, ist falsch, ein Modellierungsfehler: um eine Dreiecksbeziehung, um die diskreten Beziehungen zwischen jedem der Parteien, separat zum ersten identifizieren müssen zu lösen; das heißt alle Beziehungen sind Zwei-Wege nur.

  2. Das Projekt, Mitarbeiter und Rollen Entities sind klar, und wir wissen, etwas über sie. Hier habe ich die großen Einheiten verlassen unentwickelt, weil sie „stark“, und sie sind nicht das, was Sie konzentrieren uns auf.

  3. Die Progression Anwendungen Beispiel Attribute einer Relation , können Sie Ihre eigenen verwenden. (Unser belgischer Kollege hat bereits das Problem in Worten identifiziert, ich bin nur in Bildern bietet.) Es gibt eine Menge, dass die Menschen in der üblichen Praxis nicht tun, was sie tun sollten; Ich bin besorgt über die wahre Modellierung, von oben nach unten, um an dem richtigen Datenmodell, um die Fortschritte und kommt. Entfernen Sie alles, was Müll ist und weiterhin progressing.

  4. Ich habe Annahmen gemacht, dass die Attribute der Beziehung ein Entity rechtfertigen, so dass ich jetzt in ihnen gezogen haben. Hier habe ich Ovalen verwendet, können Sie Diamanten oder Chevrons für alle verwenden ich kümmere, nur einige Symbole verwenden, zu modellieren, was Sie brauchen.

  5. Hier kommt der Punkt, an dem wir klar sehen: Wir wollen nicht, Projekt :: Mitarbeiter :: Rolle, denn dass ein Mitarbeiter eine Rolle ausführen lassen würde; Wir wollen Mitarbeiter nur gewählt werden, wenn sie zuvor für diese Rolle genehmigt worden sind. So, Mitarbeiter :: Rolle wird immer "stärker".

  6. Daher Mitarbeiter :: Rolle ist eine Einheit. Und das rosae Ding ist ein Kind dieser speziellen Kombination oder Mitarbeiter + Rolle, nicht alle Mitarbeiter oder alle Rolle.

  7. Ebenso, wir wollen keine Mitarbeiter einen möglichen Job in jeder möglichen Projekt nehmen, wir wollen, dass sie nur zugelassene Arbeitsplätze in zugelassenen Projekte zu übernehmen. So Projekt :: Rolle ist eine starke Identität immer, und es hat Attribute trotzdem.

  8. Daher Projekt :: Rolle ist eine Einheit. Und die ovale verbleibenden ist ein Kind dieser speziellen Kombination von Project + Rolle, nicht dem gesamten Projektes.

  9. Unsere rosa Kind Attalos Entity-Status, mit seinen spezifischen Eigenschaften. Noch wichtiger ist, sind seine Beschränkungen von zuvor gezwungen Entitäten abgeleitet, nicht einfache.

  10. Die Daten haben eine natürliche Ordnung oder Hierarchie, und ein mit dem gezogenen Diagramm im Auge ist viel leichter zu verstehen. Wir haben jetzt die Möglichkeit, an den Attributen zu suchen. Sie haben die gleiche oder gleich oder verwirrend scheinen; während jetzt haben sie klare Bedeutung, aufgrund Kontext und Hierarchie.

Ich habe das Konzept eingeführt Identifiers , ohne sie zu erweitern, das werde ich verlassen zur Diskussion, wenn es notwendig ist. Ich denke, man kann sehen, dass Identifiers sind tatsächlich sehr, sehr wichtig, und sie werden als ein gewöhnlicher Teil der Modellierung Übung ausgesetzt.

Generell (Ihre Frage, wie zu meinem Beispiel Progression entgegengesetzt), Wenn wir auf Normalisierungs erhalten, die drei Anfänge Ovalen können als eine oder zwei oder bleiben als drei Objekte am Ende; einfache assoziative Tabellen ohne Attribute; oder als echte Entitäten mit Attributen ... aber wir wissen nicht, und sollte darüber jetzt nicht. Und wieder ist es noch zu früh für DDL oder für Normalisierungs in diesem Stadium. Wir haben wenig Ahnung, was die Tasten sind; Welche Eigenschaften sind mit ihnen verbunden sind; und in welcher Beziehung zu ihnen. Was mehr ist, kümmern wir uns nicht. In Bezug auf das Beispiel ja, sind die Entitäten klar und eindeutig.

Feedback bitte, dass so können Sie Fortschritte.

Edit:. Diagramm aktualisiert, Multi-Seite

Andere Tipps

EMPLOYEE

  • employee_id (pk)

PROJECT

  • project_id (pk)
  • project_description

ROLLE

  • role_id (pk)
  • role_description

Wenn ein Mitarbeiter kann nur eine Rolle pro Projekt haben:

EMPLOYEE_PROJECT_MAP

  • project_id (pk, fk PROJECT)
  • employee_id (pk, fk EMPLOYEE)
  • role_id (fk ROLLE)

Wenn ein Mitarbeiter kann nur haben 1+ Rolle pro Projekt:

EMPLOYEE_PROJECT_MAP

  • project_id (pk, fk PROJECT)
  • employee_id (pk, fk EMPLOYEE)
  • role_id (pk, fk ROLLE)

Der Unterschied zwischen den beiden ist die Verbundprimärschlüsselrolle in der zweiten Version enthält. Als Composite Primärschlüssel aller drei Säulen, muss die Kombination von Werten eindeutig sein, so dass Folgendes gilt:

project_id  employee_id  role_id
---------------------------------
1           1            1
1           1            2

Während, wenn role_id ist nicht in der zusammengesetzten Primärschlüssel enthalten, nur ein Kombination von Benutzer und Projekt kann gemacht werden -, die ein Mittel Benutzer könnten nur eine Rolle haben.

Eine CHECK-Einschränkung nicht funktionieren würde - es prüft nur die Zeile, nicht die gesamte Tabelle. Während ein Auslöser funktionieren würde, warum die Mühe, wenn Sie die Beziehung über einen zusammengesetzten Primärschlüssel oder eindeutige Einschränkung durchsetzen können? Ein Trigger würde in einem ERD nicht sichtbar sein, noch Aussagen wie CREATE TABLE oder DESC table_name.

"Bevor ich die Datenbank entwerfen Ich möchte das Problem als ein Entity-Relationship-Diagramm modellieren (Chen-Notation). In diesem Diagramm Ich möchte eine Beziehung zwischen Mitarbeiter und Projekt erstellen, ohne auf die Tasten, einen Blick und Einschränkungen, die folgen. "

Wenn die Beziehung „arbeitet-on“ zwischen dem beide (Employee und Projekt) sind many-to-many, und diese Beziehung hat weitere Attribute beschreiben (/ ausführliche Bereitstellung über) (Vorkommen) die Beziehung, dann oft Sie haben keine andere Wahl, als zu „instantiate“ die Beziehung, dh sie als eine zusätzliche Einheit zu definieren. Einige Tools unterstützen einen ERD-Dialekt, die Angabe zusätzliche Attribute für jede Beziehung erlaubt (in einem runden Feld die Beziehung Pfeil Pfeilmarkierung), aber das ist imo nicht gängige Praxis.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top