Jak utworzyć złożony klucz podstawowy w programie SQL Server 2008


178

Chcę utworzyć tabele w SQL Server 2008, ale nie wiem, jak utworzyć złożony klucz podstawowy. Jak mogę to osiągnąć?


1
Jeśli jesteś nowy w asp.net, porada: złożone klucze główne to zła rzecz, która zwykle wskazuje na słabo przemyślany projekt
smirkingman

47
@smirkingman Bardzo ważne problemy można rozwiązać, często prawie wyłącznie za pomocą złożonych kluczy podstawowych. Na przykład, gdy masz setki / tysiące użytkowników, którzy zapisują wiersze w jednej tabeli / typie jednostki. Chcesz, aby wiersze były uporządkowane według identyfikatora użytkownika, a następnie druga wartość. Twoja ocena wartości jest po prostu nieprawidłowa, a jeśli nie, wkrótce wycofamy tę funkcję.
Nicholas Petersen

Odpowiedzi:


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
Jaka jest różnica między używaniem klucza podstawowego a CONSTRAINT, jak w przykładzie @ matthew-abbott?
mateuscb

28
Tworzy nazwane ograniczenie, które można usunąć / zaktualizować według nazwy
longhairedsi

14
Nie do końca prawda. Oba tworzą „nazwane ograniczenia”. Po prostu w przypadku pierwszego nie kontrolujesz nazewnictwa. Ale po utworzeniu możesz sprawdzić nazwę, która była używana i usunąć / zaktualizować według nazwy ...
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 - Tak, nazwij swoje ograniczenia ludziom, w przeciwnym razie Sql Server robi nieprzyjemne rzeczy, takie jak nazywanie ich PK_UserGrou_5DEAEAF5 w DB jednej wersji i PK_UserGrou_3214EC0777F66C69 w innej. Jest to uciążliwe, jeśli chcesz zaktualizować lub usunąć PK, ponieważ musisz najpierw pobrać nazwę z bazy danych, a następnie użyć dynamicznego sql (lub najpierw zbudować polecenie w kodzie). Poza tym jest brzydki.
poniedziałek

2
Czy jest jakiś powód, dla którego nie chciałbym, aby moja PK była skupiona?
ranem

1
@ 4AM To może odpowiedzieć na twoje pytanie: link
Dongminator

52

Za pośrednictwem Enterprise Manager (SSMS) ...

  • Kliknij prawym przyciskiem myszy tabelę, na której chcesz utworzyć klucz złożony, i wybierz opcję Projekt .
  • Podświetl kolumny, które chcesz utworzyć jako klucz złożony
  • Kliknij prawym przyciskiem myszy te kolumny i ustaw klucz podstawowy

Aby zobaczyć SQL można następnie kliknij prawym przyciskiem na Table> Script Table As>Create To


2
Dziękuję Ci. To najbezpieczniejszy / najłatwiejszy sposób bez potencjalnego zepsucia mojej składni SQL
AlbatrossCafe

1
Ułatwia to tym, którzy chcą szybko naprawić za pomocą interfejsu projektowania / przewodnika. Dzięki za pomoc.
Trevor Nestman

32

Wiem, że spóźniłem się na to przyjęcie, ale w przypadku istniejącego stołu spróbuj:

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

27

Dla 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)
)

AKTUALIZACJA

Powinienem dodać!

Jeśli chcesz zmienić klucze obce / podstawowe, najpierw powinieneś utworzyć klucze z ograniczeniami lub nie możesz wprowadzać zmian. Jak to poniżej:

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)
)

Właściwie ostatni sposób jest zdrowszy i seryjny. Możesz sprawdzić nazwy ograniczeń FK / PK (dbo.dbname> Keys> ..), ale jeśli nie używasz ograniczenia, MSSQL automatycznie tworzy losowe nazwy FK / PK. Będziesz musiał przyjrzeć się każdej zmianie (zmianie tabeli), której potrzebujesz.

Zalecam, abyś wyznaczył sobie standard; ograniczenie powinno być zdefiniowane zgodnie z Twoim standardem. Nie będziesz musiał zapamiętywać ani zbyt długo myśleć. Krótko mówiąc, pracujesz szybciej.


to nie tworzy PK, ale tylko FK, nie?
batmaci

@batmaci; Nie, to jest zarówno FK, jak i podwójna grupa FK na PK. To użycie jest zdrowsze. Radzę to. Kiedy nie tworzysz PK, możesz też użyć.
Fatih Mert Doğancan

1

Najpierw utwórz bazę danych i tabelę, ręcznie dodając kolumny. W której kolumnie ma być klucz podstawowy. Należy kliknąć tę kolumnę prawym przyciskiem myszy i ustawić klucz podstawowy oraz ustawić wartość początkową klucza podstawowego.


-3

Aby utworzyć złożony unikalny klucz na stole

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
dodaj też trochę opisu
Abdulla Nilam
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.