Cara membuat kunci primer komposit di SQL Server 2008


178

Saya ingin membuat tabel di SQL Server 2008, tapi saya tidak tahu cara membuat kunci primer komposit. Bagaimana saya bisa mencapai ini?


1
Ketika Anda baru mengenal asp.net, sebuah saran: Kunci primer komposit adalah hal buruk yang biasanya menunjukkan desain yang kurang dipikirkan
smirkingman

47
@smirkingman Masalah yang sangat penting dapat diselesaikan, seringkali hampir secara eksklusif dengan kunci primer komposit. Seperti ketika Anda memiliki ratusan / ribuan pengguna yang menyimpan baris ke satu tabel / jenis entitas. Anda ingin baris yang dipesan oleh id pengguna, ditambah kemudian nilai kedua. Penilaian nilai Anda salah, jika tidak, kami akan mencabut fitur ini dalam waktu dekat.
Nicholas Petersen

Jawaban:


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
Apa perbedaan antara menggunakan Primary Key dan CONSTRAINT dalam contoh dengan @ matthew-abbott?
mateuscb

28
Ini menciptakan batasan bernama yang dapat dihapus / diperbarui dengan nama
longhairedsi

14
Tidak sepenuhnya benar. Keduanya menciptakan "batasan bernama". Hanya saja dengan yang pertama, Anda tidak mengontrol penamaan. Tapi begitu dibuat, Anda dapat mencari nama yang digunakan dan menghapus / memperbarui dengan nama ...
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 - Ya, sebutkan orang-orang kendala Anda, jika Sql Server melakukan hal-hal buruk seperti menamainya PK_UserGrou_5DEAEAF5 dalam DB satu rilis dan PK_UserGrou_3214EC0777F66C69 pada yang lain. Ini menyakitkan jika Anda perlu memperbarui atau menjatuhkan PK karena Anda harus terlebih dahulu mendapatkan nama dari db dan kemudian menggunakan sql dinamis (atau membangun perintah dalam kode terlebih dahulu). Juga jelek.
monty

2
Apakah ada alasan saya tidak ingin PK saya dikelompokkan?
4AM

1
@ 4AM. Ini dapat menjawab pertanyaan Anda: tautan
Dongminator

52

Melalui Enterprise Manager (SSMS) ...

  • Klik kanan pada Tabel Anda ingin membuat kunci komposit dan pilih Desain .
  • Sorot kolom yang ingin Anda bentuk sebagai kunci komposit
  • Klik kanan di atas kolom tersebut dan Setel Kunci Utama

Untuk melihat SQL yang Anda kemudian dapat klik kanan pada Table> Script Table As>Create To


2
Terima kasih. Ini adalah cara teraman / termudah tanpa berpotensi mengacaukan sintaks SQL saya
AlbatrossCafe

1
Ini membuatnya mudah bagi mereka yang menginginkan perbaikan cepat melalui antarmuka desain / panduan. Terima kasih untuk bantuannya.
Trevor Nestman

32

Saya tahu saya terlambat ke pesta ini, tetapi untuk meja yang ada, coba:

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

27

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

MEMPERBARUI

Saya harus menambahkan!

Jika Anda ingin mengubah kunci asing / primer, pertama-tama Anda harus membuat kunci dengan kendala atau Anda tidak dapat membuat perubahan. Seperti ini di bawah ini:

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

Sebenarnya cara terakhir lebih sehat dan serial. Anda dapat melihat nama Kendala FK / PK (dbo.dbname> Tombol> ..) tetapi jika Anda tidak menggunakan kendala, MSSQL otomatis membuat nama FK / PK acak. Anda perlu melihat setiap perubahan (mengubah tabel) yang Anda butuhkan.

Saya sarankan Anda menetapkan standar untuk diri sendiri; kendala harus didefinisikan sesuai dengan standar Anda. Anda tidak harus menghafal dan Anda tidak perlu berpikir terlalu lama. Singkatnya, Anda bekerja lebih cepat.


ini tidak membuat PK tetapi hanya FK, bukan?
batmaci

@batmaci; Tidak, itu adalah FK dan juga kelompok FK ganda untuk PK. Penggunaan itu lebih sehat. Saya menyarankannya. Saat Anda tidak membuat PK, Anda juga bisa menggunakannya.
Fatih Mert Doğancan

1

Pertama buat database dan tabel, tambahkan kolom secara manual. Di kolom mana menjadi kunci utama. Anda harus mengklik kanan kolom ini dan mengatur kunci utama dan mengatur nilai seed dari kunci primer.


-3

Untuk membuat kunci unik komposit di atas meja

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
tambahkan beberapa deskripsi juga
Abdulla Nilam
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.