verwendetes Datenbanksystem: <MS SQL 2008 R2>
Hallo, ich bin gerade dabei Foreign Key's in meine DB einzubauen und bin nun auf folgendes Problem gestoßen.
Wenn ich einen Foreign Key für die Tabelle Auto anlegen möchte macht man es, denke ich nomralerweise so:
ALTER TABLE dbo.Auto WITH CHECK
ADD CONSTRAINT FK_Auto_Motoren FOREIGN KEY
(Mandant, Betreiber, Einrichtung, Motor)
REFERENCES dbo.Motoren
(Mandant, Betreiber, Einrichtung, ID )
Die Tabellen sind wie folgt aufgebaut
dbo.Auto
AnlageDatum DateTime
Mandant Int PS
Betreiber Int PS
Einrichtung Int PS
Nr Int PS
Motor VarChar(3) (zukünftiger FK)
dbo.Motoren
AnlageDatum DateTime
Mandant Int PS
Betreiber Int PS
Einrichtung Int PS
ID VarChar(3) PS
Bezeichnung VarChar(50)
Befüllt sind die Tabellen aber mit Werten.
dbo.Auto
Anlage Datum | Mandant | Betreiber | Einrichtung | Nr | Motor
2011-07-17 |----1----- |----- 1 ---- | ----- 0 ----- |- 5 -|-- v6
dbo.Auto
AnlageDatum | Mandant | Betreiber | Einrichtung | ID | Bezeichnung
2011-07-17 |---- 1----- |---- 0 ----- |----- 0 -------|-- v6 | großer Moto
Nun zu meinem problem, da der betreiber im Foreign Key unterschiedlich sein kann (das ist gewollt) kann ich keinen solchen Foreign Key anlegen, gibt es vielleich eine Ausnahme die man definieren kann oder etwas ähnliches um evtl bei Betreiber eine 0 zuzulassen?
MFG Arne
Ne oder?
Oh doch xD
Du kannst den Betrieber ja auch einfach aus deinem FK ausnehmen.
ALTER TABLE dbo.Auto WITH CHECK
ADD CONSTRAINT FK_Auto_Motoren FOREIGN KEY
(Motor)
REFERENCES dbo.Motoren
( ID )
Ich vermute mal du musst dir erstmal bewusst darüber werden, was wirklich dein PrimaryKey in den Tabellen ist und was nur eine unique einschränkung sein sollte.
Vielleicht suchst du auch bei Wikipedia mal was zum Stichwort Normalisierung - ich glaube da ist nämlich im Design was schief gegangen ...
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)
Hallo arnoe,
wenn du 4 Spalten für den FK benutzt, hast du überhaupt nicht normalisiert. Ich habe noch nie mehr als 1 Spalte für einen FK benutzt. Dies ist nur Redundanz und Fehleranfällig. Und warum benutzt du 4, klar, deine zu referenzierenden Tabelle hat einen PK der über 4?? Spalten geht.
Erstelle eine ID Spalte, referenziere auf diese und setze deine 4Spalten auf Unique.
M.E. benutzt man so und so für einem PK nur IDs. (Andere können dies anders sehen, ich mach es aber nur mit ID)
Siehe u.a.
Surrogatschlüssel
Sprechender Schlüssel
Gruß
Michael