# unique kombination, welche mehrfach vorkommen darf???



## ruutaiokwu (26. Okt 2010)

hallo zusammen,

habe folgendes problem:

in einer tabelle sollten 2 felder bei versch. datensätzen mehrfach die gleichen werte annehmen können/müssen.

erlaubt z.b.:

id | feld1 | feld2
1    ab       12
2    ab       12
3    cc       33
4    cc       33
5    cc       33


nicht erlaubt:

id | feld1 | feld2
1    ab       12
2    ab       13
3    cc       33
4    cc       34
5    cd       33


versteht ihr, was ich meine? sobald mal ein datensatz mit bei feld1 und feld2 mit x und y ausgefüllt wurde, muss das auch so weitergehen... keine andere kombination.

geht das mit sql (verwende sql server...) oder sind datenbanken zu dumm dafür?


grüsse,
jan


----------



## Gast2 (26. Okt 2010)

Dann musst du deine Tabellen normalisieren.


Tabelle 1

IdToValuesTable

Id | ValuesId
1  | 1
2  | 1
3  | 2
etc...
PK auf ID, evlt FK auf Id in der ValuesTable

Tabelle 2
ValuesTable
Id | Field1 | Field2
1  | ab     | 12
2  | cc     | 33
PK auf Id, Uniique Constarint auf (Field1,Field2)


----------



## ruutaiokwu (27. Okt 2010)

oh stimmt, danke für deinen tipp...

...normalisieren ist grundsätzlich immer gut!

angenommen man will aber einen anderen weg gehen, wie würde es mit triggern aussehen?


gruss, jan


----------



## Gast2 (28. Okt 2010)

jmar83 hat gesagt.:


> angenommen man will aber einen anderen weg gehen, wie würde es mit triggern aussehen?



Sehr häßlich.... Du bräuchtest einen Trigger on Insert and Update.

In dem Trigger Code müsstes du dann so etwas machen (PL/SQL, MySQL sieht etwas anders aus aber das Prinzip sollte das gleiche sein:


```
SELECT COUNT(*) INTO var From MyTable WHERE OLD.Field1 = NEW.Field1 and OLD.Field2 != NEW.Field2;
IF var > 0 THEN
  RAISE EXCEPTION;
END IF;
```


----------

