![]() |
Datenbank: SQLite • Version: 3 • Zugriff über: SimpleDelphi-Wrappers von Tim Anderson
DB Modell für Fahrzeug, Marke, Modell?
Hallo Jungs,
ich habe ein kleines logisches Problemchen, überlege gerade wie ich für ein Fahrzeug die Marke und das Modell in einer DB designen soll? Das ich Fahrzeug mit Marke mit einer n:1 Beziehung verbinden soll ist klar, aber wie schaffe ich es zu jeder Marke alle Modelle anzuzeigen. Muss ich für jede Marke eigene Modelltabelle erstellen oder das irgendwie mit IDs lösen? Hoffe hab das Problem verständlich geschildert. Danke! |
AW: DB Modell für Fahrzeug, Marke, Modell?
Code:
Tabelle Marke
============= ID Bezeichnung Tabelle Modell ============== ID Bezeichnung Marke_ID /* Fremdschlüssel auf Marke */ Tabelle Fahrzeug ================ ID <Sonstige Felder> Modell_ID /* Fremdschlüssel auf Modell */ |
AW: DB Modell für Fahrzeug, Marke, Modell?
Liste der Anhänge anzeigen (Anzahl: 1)
Aber ich muss doch vor dem Einfügen eines Fahrzeugs erst die Marke wählen und erst dann das Modell. :|
Bei dir wird aber erst das Modell gewählt wenn ich das richtig verstehe, siehe Screenshot... |
AW: DB Modell für Fahrzeug, Marke, Modell?
Wie, wählen? Eine Marke führt im Allgemeinen mehrere Modelle, und normalerweise wird von jedem Modell mehr als ein Exemplar gebaut, somit ergibt sich je eine 1:n-Beziehung zwischen Marke und Modell sowie zwischen Modell und Fahrzeug.
|
AW: DB Modell für Fahrzeug, Marke, Modell?
Aber wie trenne ich z.B. alle Audi Modelle von VW Modellen? Sie sind ja alle in einer Tabelle. :|
|
AW: DB Modell für Fahrzeug, Marke, Modell?
Sie haben aber unterschiedliche Marke_ID-Werte.
|
AW: DB Modell für Fahrzeug, Marke, Modell?
durch die unterschiedlichen Marken?
Gruß K-H der rote mag mich nicht!! |
AW: DB Modell für Fahrzeug, Marke, Modell?
Ok... hm... :gruebel:
Wie könnte dann z.B. eine Select-Abfrage aussehen wenn ich ein Fahrzeug mit roter Farbe von Audi suche, das Modell Q7 ist? :gruebel: |
AW: DB Modell für Fahrzeug, Marke, Modell?
Code:
Nach Audi brauchste nicht fragen, da ja Q7 automatisch von Audi ist.
Select Fahrzeug.* From Fahrzeug, Modell
Where Fahrzeug.Farbei='rot' and Modell.Bezeichnung='Q7' |
AW: DB Modell für Fahrzeug, Marke, Modell?
Code:
ungefähr so
select irgendwas
from Marke,Modell,Fahrzeug where Marke.ID=Modell.Marke_ID and Fahrzeug.Modell_ID=Modell.ID and Fahrzeug.Farbe='rot' and Marke.Bezeichnung='Audi' and Modell.Bezeichnung='Q7' (darauf das Q7 immer ein Audi-Modell ist, würde ich mich nicht verlassen) Gruß K-H |
AW: DB Modell für Fahrzeug, Marke, Modell?
Zitat:
Somit also besser so abfragen
SQL-Code:
SELECT Fahrzeug.*
FROM Fahrzeug JOIN Modell ON Fahrzeug.Modell_ID = Modell.ID JOIN Marke ON Modell.Marke_ID = Marke.ID WHERE Fahrzeug.Farbe = 'rot' AND Marke.Bezeichnung = 'Audi' AND Modell.Bezeichnung = 'Q7' |
AW: DB Modell für Fahrzeug, Marke, Modell?
Zitat:
bzw. nachträglich reineditiert. So kann man's lassen. Und du bekommst einen virtuellen Keks für die Verwendung von JOIN ON statt alles in das where reinzupacken ;-) |
AW: DB Modell für Fahrzeug, Marke, Modell?
Zitat:
:duck: Gruß K-H |
AW: DB Modell für Fahrzeug, Marke, Modell?
Wenn man es noch genauer haben möchte, dann muss man auch noch die Modellvariante berücksichtigen
Code:
Für die Auswahl des entsprechenden Modells (z.B. in einer ComboBox/ListBox) nimmt man dann folgende Abfrage
Marke
- ID - Bezeichnung Modell - ID - Marke_ID - Bezeichnung Variante - ID - Modell_ID - Bezeichnung
SQL-Code:
Will man für Marke, Modell, Variante jeweils eine ComboBox/ListBox haben, so sehen die Abfragen wie folgt aus (Master-Detail)
SELECT Variante.ID AS ID,
CONCAT( Marke.Bezeichnung, ' - ', Modell.Bezeichnung, ' (', Variante.Bezeichnung, ')' ) AS Bezeichnung FROM Variante JOIN Modell ON Variante.Modell_ID = Modell.ID JOIN Marke ON Modell.Marke_ID = Marke.ID ORDER BY Marke.Bezeichnung, Modell.Bezeichnung, Variante.Bezeichnung Marke:
SQL-Code:
Modell (Detail von Marke):
SELECT ID, Bezeichnung
FROM Marke ORDER BY Bezeichnung
SQL-Code:
Variante (Detail von Modell):
SELECT ID, Bezeichnung
FROM Modell WHERE Marke_ID = :ID ORDER BY Bezeichnung
SQL-Code:
Gespeichert wird aber immer nur die Varianten-ID, die anderen (Marke,Modell) sind nur für die Eingrenzung von Modell und Variante
SELECT ID, Bezeichnung
FROM Variante WHERE Modell_ID = :ID ORDER BY Bezeichnung |
AW: DB Modell für Fahrzeug, Marke, Modell?
Liste der Anhänge anzeigen (Anzahl: 1)
Hab jetzt folgendes Diagramm, siehe Anhang...
Was passiert wenn ich kein Modell oder Variante eingebe, dann kracht doch die ganze Beziehung zusammen, oder? Ich gebe die Marke an und fertig, wie kommt die Beziehung zustande wenn dazwischen Modell oder Variante fehlt? :| |
AW: DB Modell für Fahrzeug, Marke, Modell?
Wenn Du nur die Marke angibst, z.B. 'Audi' dann erhälst Du als Ergebnis alle Audi-Modelle in allen Farben, Motorvarianten, ......
Gruß K-H |
AW: DB Modell für Fahrzeug, Marke, Modell?
Wo ist denn die Beziehung zwischen Fahrzeug und Variante?
|
AW: DB Modell für Fahrzeug, Marke, Modell?
Zitat:
|
AW: DB Modell für Fahrzeug, Marke, Modell?
Zitat:
Gruß K-H |
AW: DB Modell für Fahrzeug, Marke, Modell?
Liste der Anhänge anzeigen (Anzahl: 1)
Sorry, hab' übersehen...
|
AW: DB Modell für Fahrzeug, Marke, Modell?
So, das Grundgerüst (aus dem man auch eine View basteln könnte) für eine Abfrage über alle Tabellen sollte etwa so aussehen:
SQL-Code:
Das kann man dann auch noch filtern (WHERE-Bedingung), z.B. auf alle Audi beschränken:
SELECT
H.Bezeichnung as Hersteller, M.Bezeichnung as Modell, V.Bezeichnung as Variante, F.Bezeichnung as Fahrzeug FROM marke H JOIN modell M ON M.marke_id = H.id JOIN variante V ON V.modell_id = M.id JOIN fahrzeug F ON f.variante_id = V.id
SQL-Code:
Will man weiter eingrenzen, muss nur die WHERE-Klausel erweitert werden.
SELECT
H.Bezeichnung as Hersteller, M.Bezeichnung as Modell, V.Bezeichnung as Variante, F.Bezeichnung as Fahrzeug FROM marke H JOIN modell M ON M.marke_id = H.id JOIN variante V ON V.modell_id = M.id JOIN fahrzeug F ON f.variante_id = V.id WHERE H.Bezeichnung = 'Audi' |
AW: DB Modell für Fahrzeug, Marke, Modell?
Danke dir, aber ich hab den DB-Entwurf noch nicht fertig. :roteyes:
Siehe Post #15 und #20 |
AW: DB Modell für Fahrzeug, Marke, Modell?
Und wo ist jetzt das Problem?
Das Schema ist doch fertig ... |
AW: DB Modell für Fahrzeug, Marke, Modell?
Es gibt doch so visuelle Tools, da mußt Du nur richtig zeichnen und schon hast Du eine DB.
Gruß K-H |
AW: DB Modell für Fahrzeug, Marke, Modell?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
AW: DB Modell für Fahrzeug, Marke, Modell?
Überlegen wir mal ...
du willst zu dem Fahrzeug die genaue Modellbezeichnung (die besteht nun mal aus der Marke, dem Modell, der Variante) ... dann geht das einfach nicht zu speichern, weil du nicht alle Informationen hast. Das ist wie mit dem Geburtsdatum, wenn ich nur den Tag habe, kann ich das auch nicht als Datum speichern. |
AW: DB Modell für Fahrzeug, Marke, Modell?
Man könnte dafür eine "Unbekannt"-Variante und ein "Unbekannt"-Modell einführen :-)
Also quasi bei einem solchen Eintrag eine neue Variante und ein neues Modell anlegen. Das sollte dann vielleicht noch ein Flag bekommen damit man "richtige" von "falschen" Modellen unterschieden kann. |
AW: DB Modell für Fahrzeug, Marke, Modell?
Ich muss aber aus bestimmten Gründen das ganze so gestalten, dass die Marke, das Modell oder die Variante nicht eingegeben werden müssen. Ich weiß kling unrealistisch, muss aber so sein... der Kunde ist König wie man so schön sagt.
Oder kann ich einfach die Fremdschlüssel auf nil setzen und gut ist es? |
AW: DB Modell für Fahrzeug, Marke, Modell?
Dann musst du dir eben alle drei Schlüssel in dem Datensatz merken.
Marke, Modell, Variante |
AW: DB Modell für Fahrzeug, Marke, Modell?
Entweder fügst Du je Marke ein "Unbekannt"-Modell, dann je Modell eine "Unbekannt"-Variante ein und weist die dann je nach Informationsgehalt zu, oder die machst den Fremdschlüssel auf die Variante nullable und weist dem Fahrzeug dann NULL als variante_id zu.
|
AW: DB Modell für Fahrzeug, Marke, Modell?
Zitat:
|
AW: DB Modell für Fahrzeug, Marke, Modell?
Hast Du mal über den Vorschlag von jfheins und mir nachgedacht? Wenn da einer kommt und sagt: "ST-FU 42 ist irgend so' n BMW", dann kannst Du als Variante den Schlüssel zum "Unbekannt"-Eintrag (Variante), der zum "Unbekannt-Eintrag" (Modell) für BMW gehört, eintragen. Du musst aber dann auch bei jedem neuen Modell bzw. jeder neuen Marke dafür sorgen, dass es einen solchen Eintrag gibt.
|
AW: DB Modell für Fahrzeug, Marke, Modell?
Ok, ich glaube bei mir hat's geleuchtet. :coder2:
Danke euch, ich mach mich auf die Arbeit. 8-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz