2012-11-05 13 views
8

Wenn Export SQL-Skripte von SQL Developer gibt es mehrere Optionen zur Verfügung, aber so oder so gibt es eine UNIQUE INDEX auf Primärschlüssel wie folgtPrimärschlüssel und Eindeutiger Index - SQL-Skripte von SQL Developer erzeugt

CREATE UNIQUE INDEX "SYS_C0018099" ON "TRANSACTION" ("ID") 

erzeugen und fügen sie PRIMARY KEY auf den gleichen Tisch und derselben Spalte

ALTER TABLE "TRANSACTION" ADD PRIMARY KEY ("ID") 

die Frage ist also: ist es wie Art von Redundanz aussieht? Ich dachte, dass das Erstellen eines Primärschlüssels für eine Spalte standardmäßig einen eindeutigen Index für diese Spalte erstellen sollte? Also warum ist der erste Befehl notwendig?

Und dies kann Datenredundanz verursachen?

Ich bin auf Oracle 11g, also teilen Sie bitte alle Ideen darüber, warum es wie oben aussehen sollte.

Vielen Dank im Voraus.

+2

lesen das könnte Ihnen helfen http://viralpatel.net/blogs/understanding-primary-keypk-constraint-in-oracle/ – jazzytomato

+0

Great article;) – Dreamer

Antwort

6

Es gibt keine Redundanz - oder nur ein wenig :)

Der zweite Befehl wird der Index zur Verfügung verwenden, wenn vorhanden. Andernfalls (wenn die erste DDL nicht existiert) wird ein Index erstellt.

Die Aufteilung in zwei Befehle ist nützlich, wenn Sie dem Index einen korrekten Namen gegeben haben und ihn behalten möchten.

UPDATE: Die von Thomas Haratyk angegebenen Link ein Muss gelesen, ich mag es wirklich: http://viralpatel.net/blogs/understanding-primary-keypk-constraint-in-oracle/

UPDATE2:

: a_horse_with_no_name Recht ist, kann sie wie in einer einzigen Anweisung erfolgen
alter table TRANSACTION 
add CONSTRAINT pk_test PRIMARY KEY (id); 

So behält es den Namen (wird nicht einen sysblalbla-Objektnamen erstellen) und wenn Sie das Schlüsselwort 'USING INDEX' verwenden, können Sie Indexattribute angeben, zum Beispiel Speicherattribute.

Aber wieder haben Sie keine Probleme mit diesen beiden Aussagen, nur ein Index wird erstellt.

Vermutlich SQL Developer bevorzugen, um eine ddl pro Objekt zu bekommen und es könnte Fälle geben, wenn es besser ist.

+0

Es könnte mit nur einer einzigen Anweisung getan werden, obwohl. –

+0

Danke für die Informationen. @a_horse_with_no_name Könnten Sie bitte eine einzelne Aussage als formale Kombination der beiden 'mit einem Indexnamen' geben? Ich meine, können wir beim Erstellen des Primärschlüssels einen Indexnamen innerhalb des Befehls 'ALTER TABLE' angeben? Danke – Dreamer

+1

@Dreamer: 'alter table foo add constraint pk_foo Primärschlüssel (id)' wird eine Einschränkung namens 'PK_FOO' und einen Index mit dem gleichen Namen erstellen. Sie können den Index separat definieren, wenn Sie wollen: 'alter table foo add constraint pk_foo Primärschlüssel (id) mit index (create index pk_index_for_foo auf foo (id));' –

Verwandte Themen