2017-12-01 1 views
0

In meiner Situation, ich habedb design: Zwei "1 zu viele" Beziehung?

TABLE vehicles (
    id int(11) NOT NULL AUTO_INCREMENT, 
    transaction_type varchar(45), 
    PRIMARY KEY (`id`) 
    /* all other values of vehicle */ 
) 


TABLE Origination(
    id int(11) NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (`id`) 
) 

TABLE Additions(
    id int(11) NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (`id`) 
) 

So habe ich diese neue Fahrzeuge Tabelle, die entweder aus Origination oder Ergänzungen stammen. Der Grund, warum es von zwei Tabellen kommen kann, ist geschäftliche Bedürfnisse, es entspringt entweder der Herkunft oder es kommt aus einer speziellen Ergänzung nach der Tat. Ich bin mir nicht sicher, wie man eine "Fahrzeug" -Relation mit beiden Tabellen verbindet, da die ID von beiden kommen kann.

Also habe ich ein transaction_type-Feld hinzugefügt, wobei, wenn Typ "Additions" Join-Tabellen basierend auf Additions-ID ist. Sonst, wenn der Typ "Origination" ist, treten Sie der Ursprungs-ID bei. So habe ich eine Zwei-Tasten- "1 zu viele" Beziehung. Ist das eine gültige und brauchbare Designpraxis? Ich bin keine Datenbankperson, aber ich versuche zu lernen, wie man damit umgeht, ist der beste Weg.

+0

Von dem, was ich von der Frage verstehe ... kann es am besten 2 verschiedene Vermittler Tabellen haben: vehicles_Origination und vehicles_Additions die drei Tabellen zu verbinden. Ich bin mir nicht sicher, ob Sie danach suchen. vehicles_Origination würde vehicle_id und origination_id haben und Sie würden in diesem Fall den transaction_type nicht brauchen, was gut ist; Ich denke, das ist gegen Design-Standard. –

+0

@JohnCullen Ja, das war meine zweite Strategie, es gab 2 Beziehungstabellen, die auch die anderen verbinden. Ich dachte, es könnte verworren sein, mehrere Tabellen als solche zu haben, aber es würde auch funktionieren. Ich möchte die Tabellen in einem Best-Practice-Sinne oder optimal verbinden. Ich weiß, dass das Design nicht das Beste ist, aber es ist irgendwie was ich festhalte. – ThePirateBae

+0

@JohnCullen Eigentlich halb verwirrt auf diesem. Also hätte ich Vehicle_Additons Tabelle und Vehicle_origination Tabelle anstelle der Fahrzeugtabelle korrekt? Und dann verbinden sich diese IDs mit Hinzufügungen und Originationstafeln, anstatt sie zu verbinden, als die beiden zu einer Fahrzeugtabelle zu verknüpfen. – ThePirateBae

Antwort

1

Von dem, was ich verstehe, wollen Sie eine Haupttabelle, die ALLE Ihre Fahrzeuge und zwei separate Tabellen enthält, die diesen Fahrzeugen andere Daten hinzufügen. So würde ich diese Arbeit machen. Wenn Sie genauer wissen, was jeder Tisch tut, kann ich Ihnen mehr helfen.

TABLE Vehicle (
    id int(11) NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (`id`) 
    /* all other values of vehicle */ 
) 

TABLE Origination (
    id int(11) NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (`id`) 
) 

TABLE Addition (
    id int(11) NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (`id`) 
) 

TABLE Vehicle_Origination (
    origination_id int(11), 
    vehicle_id int(11), 
    FOREIGN KEY (origination_id) REFERENCES Origination (id), 
    FOREIGN KEY (vehicle_id) REFERENCES Vehicle (id) 
) 

TABLE Vehicle_Addition (
    addition_id int(11), 
    vehicle_id int(11), 
    FOREIGN KEY (addition_id) REFERENCES Addition (id), 
    FOREIGN KEY (vehicle_id) REFERENCES Vehicle (id) 
) 
+0

Okay, also da ist ein Benutzer. Wenn er die Webanwendung zum ersten Mal benutzt, hat er Fahrzeuge, mit denen er anfängt. Also gibt er alle Informationen für die Fahrzeuge ein und diese werden alle am Origination-Tisch hinzugefügt. Alle Transaktionen, die der Benutzer danach für Fahrzeuge durchführt, werden über die Additionstabelle abgewickelt. Ich möchte alle Fahrzeuge zu Abfragezwecken in eine Fahrzeugtabelle zusammenführen, bin mir jedoch nicht sicher, wie ich sie bei Bedarf mit ihrer jeweiligen Additions- und Ursprungstabelle verbinden kann, die auch Transaktionsinformationen enthält. Btw Danke für Ihre Reaktion und Hilfe. – ThePirateBae

+0

Ich kann versuchen, mehr zu beantworten, wenn Sie weitere Informationen benötigen. – ThePirateBae