So erstellen Sie einen zusammengesetzten Primärschlüssel in SQL Server 2008


178

Ich möchte Tabellen in SQL Server 2008 erstellen, weiß jedoch nicht, wie ein zusammengesetzter Primärschlüssel erstellt wird. Wie kann ich das erreichen?


1
Da Sie neu bei asp.net sind, ein Ratschlag: Zusammengesetzte Primärschlüssel sind eine schlechte Sache , die normalerweise auf ein schlecht durchdachtes Design hinweisen
Grinsender

47
@smirkingman Sehr wichtige Probleme können gelöst werden, oft fast ausschließlich mit zusammengesetzten Primärschlüsseln. Zum Beispiel, wenn Sie Hunderte / Tausende von Benutzern haben, die Zeilen in einem einzelnen Tabellen- / Entitätstyp speichern. Sie möchten die nach Benutzer-ID geordneten Zeilen plus einen zweiten Wert. Ihr Werturteil ist einfach falsch. Wenn nicht, werden wir diese Funktion bald ablehnen.
Nicholas Petersen

Antworten:


243
create table my_table (
     column_a integer not null,
     column_b integer not null,
     column_c varchar(50),
     primary key (column_a, column_b)
);

2
Wie ist der Unterschied zwischen der Verwendung von Primärschlüssel und CONSTRAINT im Beispiel von @ matthew-abbott?
Mateuscb

28
Es erstellt eine benannte Einschränkung, die nach Namen gelöscht / aktualisiert werden kann
longhairedsi

14
Nicht ganz richtig. Beide erstellen "benannte Einschränkungen". Es ist nur so, dass Sie mit dem ersteren die Benennung nicht kontrollieren. Aber einmal erstellt, können Sie den verwendeten Namen nachschlagen und nach Namen löschen / aktualisieren ...
Auspex

170
CREATE TABLE UserGroup
(
  [User_Id] INT NOT NULL,
  [Group_Id] INT NOT NULL

  CONSTRAINT PK_UserGroup PRIMARY KEY NONCLUSTERED ([User_Id], [Group_Id])
)

34
+1 - Ja, nennen Sie Ihre Einschränkungen Personen, sonst macht SQL Server böse Dinge wie die Namen PK_UserGrou_5DEAEAF5 in der DB einer Version und PK_UserGrou_3214EC0777F66C69 in einer anderen. Dies ist ein Problem, wenn Sie die PK aktualisieren oder löschen müssen, da Sie zuerst den Namen von der Datenbank abrufen und dann dynamisches SQL verwenden müssen (oder den Befehl zuerst im Code erstellen müssen). Es ist auch hässlich.
Montag,

2
Gibt es einen Grund, warum ich nicht möchte, dass meine PK geclustert wird?
4

1
@ 4AM Dies kann Ihre Frage beantworten: Link
Dongminator

52

Über Enterprise Manager (SSMS) ...

  • Klicken Sie mit der rechten Maustaste auf die Tabelle, für die Sie den zusammengesetzten Schlüssel erstellen möchten, und wählen Sie Design .
  • Markieren Sie die Spalten, die Sie als zusammengesetzten Schlüssel bilden möchten
  • Klicken Sie mit der rechten Maustaste auf diese Spalten und wählen Sie Primärschlüssel festlegen

Um die SQL sehen Sie dann einen Rechtsklick auf die Table> Script Table As>Create To


2
Danke dir. Dies ist der sicherste / einfachste Weg, ohne meine SQL-Syntax durcheinander zu bringen
AlbatrossCafe

1
Dies macht es einfach für diejenigen, die eine schnelle Lösung über die Design / Guid-Oberfläche wünschen. Danke für die Hilfe.
Trevor Nestman

32

Ich weiß, dass ich zu spät zu dieser Party komme, aber für einen vorhandenen Tisch versuchen Sie:

ALTER table TABLE_NAME
ADD CONSTRAINT [name of your PK, e.g. PK_TableName] PRIMARY KEY CLUSTERED (column1, column2, etc.)

27

Für MSSQL Server 2012

CREATE TABLE usrgroup(
  usr_id int FOREIGN KEY REFERENCES users(id),
  grp_id int FOREIGN KEY REFERENCES groups(id),

  PRIMARY KEY (usr_id, grp_id)
)

AKTUALISIEREN

Ich sollte hinzufügen!

Wenn Sie Fremd- / Primärschlüssel hinzufügen möchten, die sich ändern, sollten Sie zuerst die Schlüssel mit Einschränkungen erstellen, da Sie sonst keine Änderungen vornehmen können. Wie folgt:

CREATE TABLE usrgroup(
  usr_id int,
  grp_id int,

  CONSTRAINT FK_usrgroup_usrid FOREIGN KEY (usr_id) REFERENCES users(id),
  CONSTRAINT FK_usrgroup_groupid FOREIGN KEY (grp_id) REFERENCES groups(id),

  CONSTRAINT PK_usrgroup PRIMARY KEY (usr_id,grp_id)
)

Eigentlich ist der letzte Weg gesünder und serieller. Sie können die FK / PK-Einschränkungsnamen anzeigen (dbo.dbname> Keys> ..). Wenn Sie jedoch keine Einschränkung verwenden, erstellt MSSQL automatisch zufällige FK / PK-Namen. Sie müssen sich jede Änderung (Tabelle ändern) ansehen, die Sie benötigen.

Ich empfehle Ihnen, einen Standard für sich selbst zu setzen. Die Einschränkung sollte gemäß Ihrem Standard definiert werden. Sie müssen sich nicht merken und müssen nicht zu lange nachdenken. Kurz gesagt, Sie arbeiten schneller.


Dies schafft keine PK, sondern nur FK, nicht?
Batmaci

@ Batmaci; Nein, es ist sowohl eine FK- als auch eine Doppel-FK-Gruppe für PK. Diese Verwendung ist gesünder. Ich rate es. Wenn Sie keine PK erstellen, können Sie diese auch verwenden.
Fatih Mert Doğancan

1

Erstellen Sie zuerst die Datenbank und die Tabelle und fügen Sie die Spalten manuell hinzu. In welcher Spalte Primärschlüssel sein soll. Sie sollten mit der rechten Maustaste auf diese Spalte klicken, den Primärschlüssel festlegen und den Startwert des Primärschlüssels festlegen.


-3

So erstellen Sie einen zusammengesetzten eindeutigen Schlüssel für die Tabelle

ALTER TABLE [TableName] ADD UNIQUE ([Column1], [Column2], [column3]);

-3
CREATE TABLE UserGroup
(
  [User_Id] INT Foreign Key,
  [Group_Id] INT foreign key,

 PRIMARY KEY ([User_Id], [Group_Id])
)

2
Fügen Sie auch eine Beschreibung hinzu
Abdulla Nilam
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.