Laden...

Foreign Key Ausnahme für Spalte (mssql)

Erstellt von arnoe vor 12 Jahren Letzter Beitrag vor 12 Jahren 792 Views
A
arnoe Themenstarter:in
18 Beiträge seit 2010
vor 12 Jahren
Foreign Key Ausnahme für Spalte (mssql)

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

G
538 Beiträge seit 2008
vor 12 Jahren

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)

1.552 Beiträge seit 2010
vor 12 Jahren

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

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp