Entity-Relationship-Diagramm Umsatz
Ich wollte Fragen, Ihre Meinung auf die folgenden ERD-Diagramm die ich gemacht habe. Halten Sie im Verstand, dass ich nicht bereits repräsentiert die Kardinalität der Beziehungen noch.
Was ich Los ist:
- Einen client geht, ein Auto zu kaufen;
- Das Auto kann aktualisiert werden, mit vielen extras, die addieren sich zu den Basis-Preis des Autos;
- Der Verkäufer kann bieten extras ohne Kosten oder bieten einen Rabatt auf den Verkauf des Gesamtpreises, um die captivate-clients;
Was haltet Ihr von meinem Diagramm? Ist es richtig? Sie sehen, dass etwas falsch?
[BEARBEITEN]
Wie mache ich aus den folgenden Szenario. Ein Kunde verkauft mir ein gebrauchtes Auto, da ein Teil der Kauf eines neuen Autos.
- Einfach Fragen... Wenn der Rabatt ist auf den Verkauf des Gesamtpreises, warum dann die
discount
- Attribut vorhanden ist, inOrderDetails
? Warum nicht inOrder
? - bieten ein extra an keine Kosten (100% Rabatt). Aber dann wieder, ich weiß nicht, es ist der richtige Weg, Dinge zu tun.
- Ok, macht Sinn. Aber was ist wenn der Verkäufer will einen Rabatt auf die Gesamtkosten? Wo planen Sie, diese Informationen zu speichern? (Nicht sicher, ob das eine gültige business-Szenario in Ihrem Fall)
- Als Nächstes das Attribut
SalesTotal
- Dies kann berechnet werden, basierend auf den Preisen vonCar
undExtra
minusDiscount
... gibt es einen Grund, um diese Spalte als ein extra Attribut? - Der Rabatt auf die er bei den Gesamtkosten geht in der Order-Entität (Tabelle). Ich dachte, ich hätte es dort 🙁 Th Grund, warum ich den Preis als zusätzliches Attribut ist, weil das extra-Preis zu einem bestimmten Punkt. Bu sollte ich ale zu brechen ist der Verkauf genug, um den ursprünglichen Preis der Sachen zum Zeitpunkt.
- Thx @SilverlightFox
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ob Ihr Modell richtig ist oder nicht, hängt davon ab, ob Ihr Modell kann erfassen alle business-Szenarien, die Sie oben beschrieben haben - und IMHO, Ihr Modell funktioniert ganz gut (Glückwunsch!!); abgesehen von wenigen, kleinen Anomalien wie, nicht mit der
Discount
Attribut inOrder
Entität zu erfassen Allgemeine Rabatt auf den Umsatz (das ist eine mögliche business-Szenario).Aber wenn Sie erstellen Sie ein Modell wie dieses, sollten Sie das Letzte Zweck dieses Modells:
In Ihrem Fall, ich glaube, Ihr Ziel ist, erfassen die Geschäftsvorfälle durch die Gestaltung auf Online Transaction Processing (OLTP) system. OLTP-Modelle sind in der Regel normiert in der Natur (aufgrund der offensichtlichen Vorteile der Normalisierung, wie geringere Redundanz, update - /delete-Anomalie-Prävention etc.) Ihr Modell ist meist in 3NF form, ausgenommen für die wenigen transitiven Abhängigkeiten. Die Spalte
SalesTotal
im entityOrder
erscheint eine Spalte ableitbar (basierend aufPrice
undDiscount
die Sie bereits gespeichert, in anderen Einheiten) und, IMO, brauchen nicht separat betreut werden (Lesen redundante).Ebenfalls basierend auf Ihren Kommentar oben,
Ich glaube nicht, dass Sie in der Lage sein, es zu tun, weil Ihre
Extra
Einheit ist entworfen, um zu speichern der aktuellenPrice
immer. IhreOrderDeatils
enthalten, die die Beziehung zwischenCar
undExtra
für einen gegebenen Punkt in der Zeit. Wenn die Preise von Auto-und zusätzlichen änderungen später, verlieren Sie den alten Wert als aktualisieren Sie den alten Preis mit dem neuen Preis. Daher, obwohl Sie in der Lage zu verfolgen, dieID_Car
undID_Extra
ausOrderDetails
, Sie wissen nicht, was waren Ihre historische Preise während der Zeit, in der Ordnung der Schöpfung.Wenn Sie speichern möchten historische Preise, sollten Sie erwägen eine weitere Tabelle mit jeweils
Car
undExtra
zu speichern vergangene Preise gegen Termine.In der situation, wenn ein client fungieren kann, als ein Verkäufer, der Mensch wird unabhängig existieren in den beiden Ihr
Client
undSalesman
Tabelle... Das ist völlig in Ordnung (So-design-Technik genannt wird die Vertikale Trennung).Alternativ, wenn Sie wirklich brauchen, eine 3NF-Modell, dann sollten Sie erstellen Sie eine neue Entität -
Person
mit Attributen wiename
,id
etc. DiesePerson
Unternehmen genutzt werden zum speichern sowohl von Ihren Kunden und Verkäufer details wie technisch beide sind eine person, aber Ihre "Rolle" ist anders. Sobald Sie diesePerson
Person, können Sie löschenSalesMan
undClient
Personen. Dann in derOrder
Entität, Sie haben bereits einClent ID
und einSalesman ID
Attribut zum definieren der Beziehung zwischen zwei verschiedenen Personen (DieseClent ID
undSalesman ID
wirdForeign Key
zu denPerson ID
imPerson
Person). Ob eine person spielt die Rolle eines Verkäufers oder eines Clients ist bekannt ausOrder
Einheit.Hoffe, das hilft