[MySQL] Abhängigkeit von Spalten innerhalb einer Tabelle

Kerwin

Erfahrenes Mitglied
Hallo

Ich habe folgendes Problem(keine Ahnung ob das in MySQL überhaupt machbar ist).
In einer Tabelle habe ich 3 Spalten, ID(auto increment), SID(bigint), CAT(bigint).

Die ID ist die normale ID, welche immer hochzählt, unabhängig von dem, was die anderen Spalten beinhalten(halt ganz normal).

Bsp:
SID(SellerID) || CAT(Cateory)
123 || 123456789
123 || 987654321
456 || 123456789
456 || 987654321

Wie daraus hervorgeht, gibt es unterschiedliche SIDs und CATs. Jede SID darf mehrmals in der Tabelle stehen, sowie auch jede CAT.
NUR, und das ist mein Problem, darf es nur maximal eine Kombination aus SID und CAT geben, sprich, es darf nur maximal einmal 123 || 123456789 in der Tabelle stehen.
Ich will also eine Abhängigkeit der Spalten untereinander erzeugen.

Kann mir da vielleicht jemand helfen oder sagen, ob es überhaupt möglich ist in mysql?

Ich danke im vorraus
 
Du brauchst einen zusammegesetzten Primärschlüssel (Composite Key), der sich dann aus SID und CAT zusammensetzt.
Somit erreichst du, dass die Kombination aller Werte der Primärschlüssel einmalig sind.
SID 123 kann dann öfters vorkommen, aber nur einmal in Verbindung mit CID xyz - und andersrum.
Um so einen Composite Key zu erstellen, definier einfach die jeweiligen Spalten als Primärschlüssel.
 
Genau, das meine ich(Prinzip)

Nur wenn ich einen 2ten Primärschlüssel hinzufügen will, meckert mysql rum, weil nur max 1 Primärer da sein darf(eigentlich auch logisch).
Wie stelle ich denn Bsp per phpmyadmin das mit dem Composite ein(hab da nix weiter gefunden)? Oder per Quelltext? Kannst du dazu evtl ein Beispiel geben?

[EDIT]
Also ich hab es gerade teilweise hinbekommen mit dem Composite Key
Code:
CREATE TABLE `seller_cats` (
  `id` bigint(11) NOT NULL default '0',
  `sid` bigint(20) NOT NULL default '0',
  `cat` bigint(20) NOT NULL default '0',
  PRIMARY KEY  (`sid`,`cat`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
Nur das Problem, dass wenn ich die ID mit reinnehme als Primary Key, dann geht die ganze Rechnung wieder nicht auf, jedoch brauche ich den als Primary Key, da ich sonst kein auto increment einstellen kann. Gibt es da evtl noch einen Trick?
 
Zuletzt bearbeitet:
Versuchs mal mit folgendem SQL-Statement:
Code:
PRIMARY KEY(SID, CAT)

** EDIT

Kannst du nicht auf die ID verzichten? So wie es aussieht ist das eine Verknüpfungstabelle mit einer m:n Beziehung ... da braucht man eigentlich keine ID.
 
Zuletzt bearbeitet:
Halt, halt, halt.
Nicht PRIMARY KEY! Der PRIMARY ist die Id und sollte es auch bleiben! Was Du brauchst ist ein UNIQUE KEY, zusammengesetzt aus den beiden Feldern. Es gibt einen wesentlichen Unterschied zwischen PRIMARY KEY (darf's nur ein mal geben, es ist immer eine gute Idee, wenn dies die Auto-Increment-ID ist) und UNIQUE KEYs. Nicht durcheinander werfen und bitte nicht den PRIMARY vergewaltigen... ;)

Code:
CREATE UNIQUE INDEX index_name ON tabelle (spalten_name1, spalten_name2)

Grüße,
Martin
 
Zurück