SQL Constraint für eine Tabelle

Helios co.

Lt. Commander
Registriert
März 2005
Beiträge
1.863
Hallo @all,

ich brauche (vermutlich) ein Constraint in einer meiner Tabellen und bin mir nicht sicher, wie ich am Besten vorgehen soll. Daher bitte Hilfe! :)

Ich nutzue Oracle, wobei für die Idee an sich sollte das irrelevant sein.

Folgende Tabelle sei gegeben:

Category | ID | Order
1 |1 |1
1 |2 |2
1 |3 |3
2 |4 |1
2 |5 |2

Der Primärschlüssel besteht aus Category und ID. Order ist hierbei quasi als Reihenfolge zu verstehen und muss somit eindeutig sein.
D.h. für ein Category+ID Paar darf niemals ein Order-Wert 2mal vorkommen.

Wie realisiere ich das am Besten? Vermutlich braucht man dafür nicht einmal ein Constraint, doch stehe ich momentan etwas auf dem Schlauch (zu dieser späten Stunde :))

Falls jemand eine Idee hat: Im Voraus demselbigen Vielen Dank!
 
Dir ist klar, dass alleine aufgrund der Tatsache, dass Category und ID zusammen Primärschlüssel sind, es unmöglich sein kann, dass bei einem solchen Paar zwei oder mehr Zeilen mit verschiedenen Orders sind, da sonst mehrere Zeilen ja die selben Primärschlüssel hätten...

Oder hab ich das Problem nicht verstanden?
 
Ich glaube du hast nicht ganz verstanden, was ich meine.
Folgendes Beispiel:

Nach deiner Erklärung wäre folgendes NICHT möglich:
1 1 1
1 1 2
Und damit hast du Recht, aber was ich meinte ist Folgendes:

1 1 1
1 2 1

Und das ist durchaus möglich! (Auch wenn die ersten beiden Werte einen Primärschlüssel bilden!)
Und genau das will ich nicht haben.


Du hast mir allerdings trotzdem geholfen.
Ich ändere einfach den Primärschlüssel. Dieser besteht damit nicht mehr aus den beiden genannten Werten, sondern lediglich aus dem ersten Wert (damit werden die beiden oben geschilderten Fälle ausgeschlossen).

Thx!
 
Zuletzt bearbeitet:
Ich würde mit UNIQUE arbeiten, welches für Category und Order gilt

Hier ein Beispiel-Code
http://www.w3schools.com/sql/sql_unique.asp schrieb:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
)
Also wäre bei dir z.B.
CONSTRAINT uc_catorder UNIQE (Category, Order)


Btw. Lies bitte nochmal was du oben geschrieben hast: "D.h. für ein Category+ID Paar darf niemals ein Order-Wert 2mal vorkommen." -> die Beschreibung ist m.E. falsch...

Edit. Nein, Primärschlüssel auf Category hilft doch nicht oO
Wenn, dann muss der Primärschlüssel ID sein, und das wäre tatsächlich wohl das einfachste...
 
Zuletzt bearbeitet:
@1668mib

Jap, du hast absolut Recht!Mit unique klappt das prima. Vielen Dank für die schnelle und kompetente Hilfe!

Lösung:

1. Primärschlüssel auf Category und ID
2. Unique auf Category und Order
 
Zuletzt bearbeitet:
Zurück
Oben