2017-01-30 3 views
-2

Ich entwickle eine Anwendung für die Erstellung von Angeboten. Zuerst machen Sie eine Kostenaufschlüsselung (oder Berechnung), und danach fügen Sie einen Posten zum Angebot hinzu. Das Problem ist, dass ich viele Produkte habe, so dass jede Kategorie eines Produkts seine eigene Kostenaufschlüsselungsform mit verschiedenen zu füllenden Parametern hat. Wenn ich nur eine Tabelle für die Kostenaufschlüsselung haben werde, dann wird es riesig sein (sehr viel von Feldern in der Tabelle). Ich habe das Gefühl, dass dies nicht der richtige Ansatz ist. So kam ich unten mit Diagramm oben:Verbinden eines Fremdschlüssels mit mehreren Tabellen (Primärschlüssel)

My diagram

Ist diese Lösung auch möglich, oder muss ich haben „N“ (wenn ich N-Tabellen) unterschiedliche FK für jede Kosten brechen Tisch? Hast du bessere Lösungen?

Ich habe eine andere Frage, wenn meine Verknüpfungstabelle "Quotation_QtnDetail" notwendig ist?

+0

Verwenden Sie eine andere Tabelle mit einer Beziehung 1-1 für alle Berechnungstabellen. Verwenden Sie diese Tabelle als Primärschlüsseltabelle für Ihren Fremdschlüssel. Es ist einfach, viele Tabellen in einer 1-1-Beziehung zu verbinden, aber nicht in einer 1-m-Beziehung. –

Antwort

0

Es wäre möglich, einen Verweis auf einen bestimmten Wert in einer dieser Tabellen zu speichern, indem eine Spalte CalculationType anzeigt, in welcher Tabelle sich der Datensatz befindet, zusammen mit einer generischen Referenz-ID-Spalte (mit der ID des relevanten Datensatzes). . Wenn Sie beispielsweise eine CalcId von 123 und eine CalculationType von 2 speichern, würde dies auf den Datensatz mit der ID 123 in der Tabelle Calc2 zeigen.

Der Nachteil dabei ist, dass Sie die Möglichkeit verlieren, Ihre Daten mit FK-Constraints zu validieren, und es wird auch Joins zu Ihren Berechnungstabellen ein wenig komplizierter machen.

In Bezug auf die Quotation_QtnDetail Tabelle, es sei denn, ein QtnDetail Datensatz könnte jemals mit mehreren Quotation Datensätze verknüpft werden, gibt es keine Notwendigkeit für diese zusätzliche Verknüpfungstabelle. Verknüpfen Sie es stattdessen direkt, indem Sie eine QtnId Spalte zu der QtnDetail Tabelle hinzufügen. In ähnlicher Weise können Sie möglicherweise auch die Tabelle Calc_QtnItm entfernen, wenn ein Element immer nur mit einem einzelnen Berechnungssatz verknüpft ist.

+0

Danke. Ich werde Ihre Lösung mit CalculationType verwenden. Aber wie kann ich das mit SQL Abfragen verwalten? Benutze ich CASE-Anweisung? – Urban

+0

Hängt davon ab, was Sie tun müssen. Sie könnten links alle Tabellen beitreten (z. B. LINKE JOIN Calc1 ON Calc1.CalLinkId = Calc_QtnItm.CalcId UND Calc_QtnItem.CalculationType = 1) und am Ende viele NULL-Werte auswählen, oder Sie könnten nur Ihre Anwendung eine separate Abfrage zu tun haben Erhalte die Calc-Informationen aus der relevanten Tabelle (basierend auf Calc_QtnItem.CalculationType). – Sam

Verwandte Themen