Entwickler-Ecke

Datenbanken - 2. Primary Key im nachhinein einfügen


OlliWausD - Di 01.02.05 11:28
Titel: 2. Primary Key im nachhinein einfügen
hi Jungs,

ich habe eine Tabelle, in der schon ein Primary Key (ean) vorhanden ist.
Das Programm-Modul soll jetzt erweitert werden, so dass zu diesem Primary Key mehrere DS angelegt werden können.
Hierzu benötige ich einen 2. Primary Key (Nr)

DS1 wäre dann EAN-Text1 0
DS2 wäre dann EAN-Text1 1
...

Also:

Quelltext
1:
2:
ALTER TABLE ABCTabelle ADD nr INTEGER NOT NULL
UPDATE TABLE ABCTabelle Set Nr = 0

--> Funktioniert einwandfrei, jedoch

Quelltext
1:
ALTER TABLE ABCTabelle ADD PRIMARY KEY (ean,Nr)                    

--> Das funktioniert leider nicht !!! Im IB-Expert bekomme ich die Fehlermeldung:
Zitat:
This operation is not defined for system tables.
unsuccessful metadata update.
STORE RDB$RELATION_CONSTRAINTS failed.
action cancelled by trigger (3) to preserve data integrity.
Attempt to define a second PRIMARY KEY for the same table.


es gibt vom DB-System angelegte Trigger beide beinhalten
Zitat:
Check ABCTabelle.FeldA

jodoch sind diejenigen Trigger5 und Trigger17 !

Wie finde ich Trigger 3 ???

mfg

OlliW


Udontknow - Di 01.02.05 11:35

Hallo!

Dein Problem ist eigentlich recht einfach:

Quelltext
1:
Attempt to define a second PRIMARY KEY for the same table.                    


Übersetzt: Versuch, einen zweiten Primärschlüssel für dieselbe Tabelle anzulegen. Soetwas geht einfach nicht, es kann immer nur einen Primärschlüssel geben, alles andere wäre unsinnig.

Du musst zuerst den alten Primärschlüssel entfernen, und dann den neuen, der über zwei Felder gehen soll, definieren.

Cu,
Udontknow


jasocul - Di 01.02.05 11:40

Ergänzend zu Udontknow:
Statt eines zweiten Primary Key (was von der Bezeichnung schon keinen Sinn macht), wird dir vermutlich ein Unique Key ausreichen.


Udontknow - Di 01.02.05 12:01

Also, ich habe ihn so verstanden, daß er einen mehrteiligen Primärschlüssel haben will:
Zitat:
Das Programm-Modul soll jetzt erweitert werden, so dass zu diesem Primary Key mehrere DS angelegt werden können.
Bei einem weiteren Unique Index wäre das ja so nicht möglich...

Cu,
Udontknow


OlliWausD - Di 01.02.05 12:06

Der Primärschlüssel sollen quasi beide Felder sein. Wie bei einer n:m-Tabelle

Das mit dem Löschen und neu erstellen hab ich mir auch schon überlegt. Will das aber nicht unbedingt!

Aber noch mal zurück zu dem Trigger.
Wieso bringt er dann die Fehlermeldung mit dem Trigger??

mfg

OlliW

EDIT: Zefix, wie lösch ich denn wieder nen Primary Key???
ALTER TABLE ABCTabelle DROP PRIMARY KEY funktioniert nicht. Beim Primary sagt er Syntaxfehler !

Ich glaub, ich bin heut noch nicht ganz wach

mfg die 2.

Olliw


Udontknow - Di 01.02.05 12:48

Weiss jetzt gerade nicht die genaue Syntax, aber mach es doch einfach über den IB-Expert.

PS: Hiess es nicht alter table *tabelle* drop constraint *Name des Primärschlüssels*?

Cu,
Udontknow


OlliWausD - Di 01.02.05 13:03

ahh ja genau, das constraint vergessen :roll:

funkioniert

Thx

mfg

OlliW


jasocul - Di 01.02.05 13:18

Udontknow hat folgendes geschrieben:
Also, ich habe ihn so verstanden, daß er einen mehrteiligen Primärschlüssel haben will:
Zitat:
Das Programm-Modul soll jetzt erweitert werden, so dass zu diesem Primary Key mehrere DS angelegt werden können.
Bei einem weiteren Unique Index wäre das ja so nicht möglich...


Sorry. Muss ich irgendwie überlesen haben.


OlliWausD - Di 01.02.05 14:16

jo, kein Thema jasocul

is mir ja auch schon passiert :wink:

mfg

Ranger Kirby