2011-01-13 7 views
2

Ich baue eine MySQL Datenbank von Fahrzeugen. Es gibt viele verschiedene mögliche Fahrzeugattribute, die von einer Datenbank, Farbe, Übertragung, Kraftstoff usw. belegt werden sollen.Datenbankentwurf für viele mögliche Attribute

Wäre es sinnvoll, für jeden Satz von Attributen eine Tabelle zu erstellen oder sollte ich sie alle in einem zusammenfassen Tabelle, dann benennen Sie jede Spalte, was das Attribut ist. Dann würde ich nur die möglichen Optionen als Zeilen auflisten.

Irgendwie neu zu Datenbank-Design und wollte einige Meinungen bekommen. Vielen Dank im Voraus!

Antwort

2

Die Antwort auf Ihre Frage hängt davon ab, ob jedes Fahrzeug mehr als eine "Farbe" oder "Kraftstoff" hat.

Wenn es mir war, würde ich die Basistabellen wie folgt aussehen:

Tabelle: Fahrzeuge - Cols: VehicleID, Name usw.

Tabelle: Farben - Cols: ColorID, Name RgbValue,

Tabelle: Kraftstoff - Cols: fuelID, Name usw.

Wenn jedes Fahrzeug nur eine Farbe und einen Kraftstoff haben kann, dann das Fahrzeug Tisch wie etwas zu sein, ändern :

Tabelle: Fahrzeuge - Cols: VehicleID, name, ColorID, fuelID usw.

Wenn jedes Fahrzeug 4 Farben und 3 Brennstoffe haben könnte, usw. Dann allein das Fahrzeug Tisch verlassen, und erstellen „Beziehung "Tabellen ähnlich wie diese:

Tabelle: vehicle_has_color - Cols: VehicleID, ColorID

Tabelle: vehicle_has_fuel - Cols: VehicleID, fuelID

Hoffentlich gibt Ihnen das ein ideales Datenbankdesign und gibt Ihnen einen guten Ausgangspunkt. Wenn Sie nur 3 verschiedene Farben haben und sich nicht ändern, ist es möglicherweise einfacher, den Farbnamen direkt in die Vehikel-Tabelle einzufügen und die Auswahl der Farbe im PHP- oder HTML-Code vorzunehmen .

+0

Ja, jedes Fahrzeug hat nur ein ausgewähltes Attribut. – timroman

+0

OK, ich werde für jedes Attribut eine wirklich kleine Tabelle erstellen. Sollte ich für jede Option einen primären und einen ausländischen Schlüssel angeben? Zum Beispiel: Tabelle -> att_color: Index, fkey, Farbname Vielen Dank! – timroman

+0

Ich würde den Fremdschlüssel in die Fahrzeugtabelle legen. Stellen Sie sich die Attributtabellen als eine Liste vor, aus der Sie auswählen können, und verwenden Sie in der Hauptvehikel-Tabelle einen Fremdschlüssel, um auf die Liste zu zeigen und "Ich möchte diesen" zu sagen. – GarrettNow

1

Wenn Sie für jede Entität einen festen Satz von Attributen haben, fügen Sie sie in eine Tabelle ein. Wenn Sie haben unterschiedliche Attribute setzten sie in einer separaten Tabelle mit dieser Struktur:

TABLE (
    Primary Key ID 
    Foreign Key Ref 
    AttributeName 
    AttributeValue 
) 
+0

Nun, die Attribute können sich in der Zukunft ändern, aber es wird selten sein. – timroman

0

Wenn Ihre Datenbank historische Änderungen angezeigt werden muss, dann würde ich mit Vorschlag gehen # 2 (setzen sie alle in einer Tabelle), aber Wenn Sie nur Fahrzeuge nach Farbe, Getriebe, Kraftstoff usw. darstellen möchten, dann fügen Sie die Attribute in eine separate Tabelle ein. Denn dann haben Sie Beziehungen mit ID-Nummern und wenn sich ein Wert ändern muss, nehmen Sie diese Änderung in der Tabelle eines Attributs vor und es wird überall aktualisiert. Es ist auch besser für die Konsistenz z.B. "29 mpg Hwy" vs "29mpg Hwy".

+0

Nein, historische Änderungen an den Optionen sind nicht wichtig. Ich stimme der Konsistenz zu, und deshalb mache ich es aus der Datenbank. – timroman

0

Werfen Sie einen Blick auf diese SO-Beispiele: one, two, three.

Verwandte Themen