2016-08-25 5 views
0

Okay, also - ich habe 3 Tabellen. Organisationen OrganisationenSo beheben Sie diese SQL-Tabellen

Ich kann nicht für das Leben von mir herauszufinden, wie man die Beziehungen zwischen ihnen auflösen. Hier sind die Geschäftsregeln:

  • Eine Organisation kann viele Mitarbeiter haben
  • Eine Organisation kann an vielen Projekten

  • Ein Mitarbeiter Teil einer Organisation

  • sein kann, arbeiten gemietet werden

    Ein Mitarbeiter kann der Ansprechpartner für mehrere Projekte sein

  • Ein Projekt kann m mieten alle Organisationen

  • Ein Projekt viele Mitarbeiter haben können (einen Ansprechpartner für jede Organisation)

müssen in der Lage sein, Kontakte, während zu beiden Projekten zuweisen Teil einer Organisation zu sein müssen Unternehmen zuordnen können, Projekte Ich habe versucht, alles, was ich denken kann, um die viele zu viele Beziehungen in dort zu lösen, aber kann keinen Weg finden, alles funktioniert ... Vielen Dank im Voraus für jede Hilfe!

+0

Sie brauchen also auch eine Mitarbeiter-Tabelle, oder? Oder soll Kontakt Mitarbeiter sein? – WillardSolutions

+2

Was hast du probiert? Manchmal mit einfachen Schemas wie diesem ist es am besten, wenn Sie es in einer ERD zeichnen. – scsimon

Antwort

0

Es scheint ziemlich einfach zu sein, diese Beziehungen in der folgenden Weise abzubilden;

Ein Mitarbeiter kann Teil einer Organisation sein.

Eine Organisation kann viele Mitarbeiter haben

This can be handled by having an OrganizationId on the Employee table. 

Ein Mitarbeiter kann der Kontakt an mehreren Projekten sein

Ein Projekt viele Organisationen

Ein Projekt mieten können viele Mitarbeiter haben können (einen Ansprechpartner für jede Organisation)

Eine Organisation kann angestellt werden, um an vielen Projekten

zu arbeiten
This seems to be handled by having a (some would call bridge table) ProjectResource table, which has a ProjectId and ContactId field. (This could also have OrganizationId, depending on how you are using the database, but to be more normalized, since it can be implied by the Contact, it is not needed) 
+0

Das scheint wie es funktionieren würde! Ich hatte vorher nur eine Bridge-Tabelle zwischen Organisationen und Projekten ausprobiert, dachte nicht, dass die Mitarbeitertabelle stattdessen dort wäre Will alles rein und sehen, wie es sich mit ein bisschen Testdaten verhält und kommen zurück zu sagen, ob es funktioniert oder nicht. Vielen Dank! – hero9989

+0

Frage: Wie gehe ich bei dieser Bridge-Tabelle vor, um eine Zeile zu aktualisieren? Sollte ein Kontakt seine Organisation verlassen und ein Projekt diesen Kontakt wegbewegen oder ersetzen, ProjektID aktualisieren, wo contactID nicht funktioniert, da mehrere Instanzen innerhalb der Tabelle vorhanden sind Benötige ich einen eindeutigen Brückenidentifikator? – hero9989

+0

Ein Mitarbeiter kann nur einmal an einem bestimmten Projekt teilnehmen, also können Sie es einfach tun; SET ProjectId = y WHERE EmployeeId = x UND ProjectId = x – Milney

0

Solange Ihre Beziehung zwischen zwei bestimmten Tabelle viele-zu-viele ist, müssen Sie möglicherweise eine separate Tabelle (auch Bridge-Tabelle im Allgemeinen genannt) haben, um diese Beziehung darzustellen.

So müssen Sie diese Tabellen:

  • Organisation (Projektfremdschlüssel hat, hat Kontakt Fremdschlüssel)
  • Mitarbeiter
  • Project (Projekt Fremdschlüssel hat) (Organisation Fremdschlüssel hat, hat Kontakt/Mitarbeiter Fremdschlüssel [siehe Kontakt])
  • Kontakt (Diese Tabelle kann erforderlich sein oder auch nicht, je nachdem, ob ein Projekt mehrere Kontakte haben kann oder nicht).wenn es unnecesarry Sie alle Kontaktfremdschlüssel mit Mitarbeiter ersetzen kann)
  • Brücke Tabelle zwischen Organisation und Projekt (sowohl Organisation und Projektfremdschlüssel)

ich verpasst haben könnte etwas, aber ich glaube, Sie den Punkt bekam . Sie müssen nur eine Erdung zeichnen, um alle diese Beziehungen klar zu bestimmen.

Verwandte Themen