2016-05-19 4 views
0

Ich entwerfe ein Datenbank-Entity-Modell. Ich möchte Kreisbeziehungen vermeiden, aber ich bin mir nicht sicher, wie es in dem folgenden Fall zu tun ist:Design des Datenbank-Entity-Modells mit zirkulären Beziehungen

Das System dient zum Verfolgen der Entwickler Aufgaben und Kunden Käufe. Jedes Produkt hat eine und nur eine Art von Technologie zugeordnet und eine Menge von Stunden. Kunden können verschiedene Arten von Produkten kaufen. Eine Aufgabe hat eine einzige zugeordnete Technologie.

Diese Beziehungen sind wichtig, weil nach den Daten I ein, wenn ein Client zur Abfrage in der Lage sein wollen, ist mehr Stunden in bestimmten Technologie als die Stunden mit ihm auf der gegenüberliegenden Seite gekauft oder, wenn er Stunden in einer anderen Technologie gekauft, dass er benutzt nicht. Ich möchte auch fragen, wie Entwickler ihre Stunden in verschiedenen Technologien verbringen oder welche Technologien mit einem Entwickler verbunden sind.

Hier ist mein Entwurf, aber ich denke, die zirkuläre Beziehung ist etwas, das ich vermeiden sollte, und ich sollte einen anderen Weg finden, es zu lösen.

enter image description here

Welche der normale Weg, dies zu lösen sein sollte?


Mit dem Vorschlag Alex würde dies das neue Diagramm

enter image description here

+0

Können Sie "Aufgaben" detaillierter beschreiben. Ich hätte gedacht, dass "Aufgaben" direkt mit Produkten verbunden sind. – Alex

+1

Welche zirkuläre Beziehung? – philipxy

+0

@Alex danke für Ihren Kommentar. Task ist etwas, wo der Entwickler für eine Dauer arbeitet. Angenommen, ein Client hat zwei Systeme, eines mit einem Ruby-Stack und ein anderes mit einem Java-Stack. Wenn der Entwickler vier Stunden in einem System und vier Stunden in einem anderen System arbeitet, hat er zwei Aufgaben, eine für jedes System. Das Problem, mit dem ich konfrontiert bin, ist, dass es passieren kann, dass die Entwickler nicht mit den verkauften Produkten übereinstimmen, vielleicht müssen sie mehr in einer Technologie arbeiten und nicht auf der anderen. Eines der Ziele dieses Modells besteht darin, diese Situationen hervorzuheben. – agusgambina

Antwort

1

Derzeit Ihre Logik nicht die Verknüpfung der Ordnung oder Produkt zu aufgabenspezifischen Kauf zulässt.

Ich schlage vor:

Entwickler | - 8 Aufgaben 8-- Käufe
Kunden | - 8 Käufe 8-- | Produkte 8-- | Technologies

Annahmen:

  • Ihr Unternehmen ein Produktkatalog hat, von dem Kunden können wählen, bestimmte Produkte zu kaufen.
  • Jedem Produkt wird eine bestimmte Anzahl Entwicklungsstunden zugewiesen (Feld products.hours).
  • Entwickler wird dann zugewiesen, um die Kaufanforderungen (Produktanpassungen usw.) zu erfüllen, die in Aufgaben aufgeteilt sind. Die für die Aufgabe aufgewendeten Stunden werden aufgezeichnet.

Berichtsanforderungen Prüfliste:

Sie können zugeordnet Entwicklungsstunden gekauft für jedes Produkt und Technologie Kunden erfahren.

SELECT * 
FROM Purchases 
    JOIN Products 
     JOIN Technologies 
WHERE client_id = 'customer' 

Sie können herausfinden, wie viele Stunden für jedes Produkt und die zugehörige Technologie ausgegeben werden.

SELECT * 
FROM Tasks 
    JOIN Purchases 
     JOIN Products 
      JOIN Technologies 
WHERE client_id = 'customer' 

von Aufgaben zu Käufen Verknüpfung können Sie, was Kunden Produkte/Technologien, um herauszufinden, wie gut verwendet als das spezifische Produkt, welche Aufgaben schafft.

Wenn der Entwickler an Produkten/Technologien arbeiten muss, die nicht mit bestimmten Kunden verknüpft sind, sollten Sie in der Lage sein, Ihre eigene Firma der Kundenliste hinzuzufügen und Bestellungen/Aufgaben zuzuweisen und die Entwicklungszeit auf diese Weise zu verfolgen .

Bitte beachten Sie, dass die oben genannten basiert auf meiner begrenzten Unterlegung von, was wahrscheinlich eine viel größere Anforderungen Umfang ist. Wenn Sie sich entscheiden, meinem Vorschlag zu folgen, überprüfen Sie, ob alle anderen Anwendungs-/Berichtsanforderungen erfüllt sind.

+0

Danke @Alex du hast Recht, das ist, was ich gesucht habe. – agusgambina