Cum se creează cheia primară compozită în SQL Server 2008 (Programare, Sql, Sql Server 2008)

Ganesamoorthy a intrebat.

Vreau să creez tabele în SQL Server 2008, dar nu știu cum să creez cheia primară compozită. Cum pot realiza acest lucru?

Comentarii

  • Având în vedere că sunteți nou în asp.net, un sfat: Cheile primare compozite sunt o lucru rău care indică de obicei un design prost gândit –  > Por smirkingman.
  • 54

  • @smirkingman Probleme foarte importante pot fi rezolvate, adesea aproape exclusiv cu chei primare compuse. Cum ar fi atunci când aveți sute / mii de utilizatori care salvează rânduri într-un singur tabel / tip de entitate. Vrei ca rândurile să fie ordonate după user-id, plus apoi o a doua valoare. Judecata dvs. de valoare este pur și simplu incorectă, dacă nu, am fi depreciat această caracteristică în curând. –  > Por Nicholas Petersen.
  • Posibil duplicat al Crearea unei chei primare compozite în SQL Server –  > Por Arun Prasad E S.
8 răspunsuri
Thilo
create table my_table (
     column_a integer not null,
     column_b integer not null,
     column_c varchar(50),
     primary key (column_a, column_b)
);

Comentarii

  • Care este diferența dintre utilizarea Cheia primară și CONSTRAINT ca în exemplul lui @matthew-abbott? –  > Por mateuscb.
  • 29

  • Se creează o constrângere cu nume care poate fi ștearsă/actualizată după nume –  > Por longhairedsi.
  • Nu este chiar adevărat. Ambele creează „constrângeri numite”. Doar că, în cazul primei, nu controlați denumirea. Dar, odată creată, puteți căuta numele care a fost folosit și puteți șterge/actualiza după nume… –  > Por Auspex.
Matthew Abbott
CREATE TABLE UserGroup
(
  [User_Id] INT NOT NULL,
  [Group_Id] INT NOT NULL

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

Comentarii

    37

  • +1 – Da, denumiți constrângerile oamenilor, altfel Sql Server face lucruri urâte, cum ar fi să le numească PK_UserGrou_5DEAEAF5 în BD-ul unei versiuni și PK_UserGrou_3214EC0777F66C69 în alta. Acest lucru este o bătaie de cap dacă trebuie să actualizați sau să renunțați la PK, deoarece trebuie să obțineți mai întâi numele din baza de date și apoi să utilizați SQL dinamic (sau să construiți mai întâi comanda în cod). De asemenea, este urât. –  > Por monty.
  • Există vreun motiv pentru care nu aș vrea ca PK-ul meu să fie grupat? –  > Por 4AM.
  • @4AM Acest lucru ar putea răspunde la întrebarea dvs.: link –  > Por Dongminator.
kevchadders

Prin intermediul Enterprise Manager (SSMS)…

  • Faceți clic dreapta pe tabelul pe care doriți să creați cheia compozită și selectați Design.
  • Evidențiați coloanele pe care doriți să le formați ca o cheie compozită
  • Faceți clic dreapta pe aceste coloane și Setați cheia primară

Pentru a vedea SQL, puteți apoi să faceți clic dreapta pe Table > Script Table As > Create To

Comentarii

  • Vă mulțumim. Aceasta este cea mai sigură/ușoară metodă fără a îmi strica sintaxa SQL –  > Por AlbatrossCafe.
  • Acest lucru face mai ușor pentru cei care doresc o rezolvare rapidă prin interfața de proiectare / ghidare. Vă mulțumim pentru ajutor. –  > Por Trevor Nestman.
Ray K.

Știu că am ajuns târziu la această petrecere, dar pentru un tabel existent, încercați:

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

Fatih Mert Doğancan

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

UPDATE

Ar trebui să adaug !

Dacă doriți să adăugați chei străine / primare de modificare, în primul rând trebuie să creați cheile cu constrângeri sau nu puteți face modificări. Așa cum se arată mai jos:

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

De fapt, ultima modalitate este mai sănătoasă și serială. Vă puteți uita la numele constrângerilor FK/PK. (dbo.dbname > Keys > …) dar dacă nu utilizați o constrângere, MSSQL creează automat nume FK/PK aleatorii. Va trebui să vă uitați la fiecare modificare (alter table) de care aveți nevoie.

Vă recomand să vă stabiliți un standard; constrângerea ar trebui să fie definită în conformitate cu standardul dumneavoastră. Nu va trebui să memorați și nu va trebui să vă gândiți prea mult timp. Pe scurt, lucrați mai repede.

Comentarii

  • acest lucru nu creează PK, ci doar FK, nu-i așa? –  > Por Emil.
  • @batmaci; Nu, Este atât FK, cât și grupul dublu FK la PK. Această utilizare este mai sănătoasă. Eu o sfătuiesc. Când nu creați PK, puteți folosi și voi. –  > Por Fatih Mert Doğancan.
Sakthi Thanuskodi

Mai întâi creați baza de date și tabelul, adăugând manual coloanele. În care coloană să fie cheia primară. Ar trebui să faceți clic dreapta pe această coloană și să setați cheia primară și să setați valoarea inițială a cheii primare.

Abhishek Jaiswal

Pentru a crea o cheie unică compozită în tabel

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

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

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

Comentarii

  • adăugați și o descriere.  > Por Abdulla Nilam.