Quy ước đặt tên cho ràng buộc duy nhất


129

Các quy ước đặt tên rất quan trọng, và khóa chính và khóa ngoài có các quy ước được sử dụng phổ biến và rõ ràng ( PK_TableFK_Table_ReferencedTable, tương ứng). Việc IX_Table_Columnđặt tên cho các chỉ mục cũng khá chuẩn.

Điều gì về các ràng buộc UNIITE? Có một quy ước đặt tên thường được chấp nhận cho ràng buộc này? Tôi đã thấy UK_TableName_Column, UQ_TableName_Columnvà ai đó khuyên bạn AX_TableName_Column- Tôi không biết nó đến từ đâu.

Tôi thường sử dụng UQnhưng tôi không đặc biệt thích nó và tôi không thích phải bảo vệ sự lựa chọn của mình khi sử dụng nó chống lại một UKngười ủng hộ.

Tôi chỉ đơn giản muốn xem liệu có sự đồng thuận về cách đặt tên phổ biến nhất hay lý do chính đáng tại sao một người có ý nghĩa hơn những người khác.


1
@Mitch Vì sao? Tôi cũng vậy nhưng tôi luôn tự hỏi tại sao không ai sử dụng U. Là gì Qđứng cho?
Kirk Broadhurst

1
Bạn có thể hỏi cùng một câu hỏi về IX cho IndeX ... tại sao không chỉ tôi?
Chris J

3
"UQ" chỉ là tên viết tắt của "UNIQUE". Lý do cho hai chữ cái về cơ bản là một tiền lệ được đặt bởi "PK".
Đánh dấu Cidade

2
Cá nhân tôi đã kết thúc bằng cách sử dụng UX_ * cho "Unique indeX", để tỏ lòng tôn kính với mặc định của IX cho "IndeX". Tôi đặc biệt không thích UK_ vì tôi đến từ Vương quốc Anh. Tôi có thể bị thuyết phục về AK nếu đó là những gì internet thích.
Tim Abell

@KirkBroadhurst Tôi chưa bao giờ thấy một quy ước như vậy nhưng vì sự ủng hộ nên nó phải phổ biến và phục vụ tốt mục đích. Nhưng có một khóa ngoại có tên FK_03 không hữu ích lắm, sẽ tốt hơn nếu đặt tên cho nó FK_TargetTable_SourceTable? Bạn có thể vui lòng giải thích.
CodingYoshi

Câu trả lời:


56

Suy nghĩ của tôi là nó không phải là một chìa khóa: đó là một hạn chế.

có thể được sử dụng như một khóa tất nhiên và xác định duy nhất một hàng, nhưng nó không phải là khóa.

Một ví dụ sẽ là khóa đó là "ThingID", một khóa thay thế được sử dụng thay cho ThingName khóa tự nhiên. Bạn vẫn cần phải hạn chế ThingName: mặc dù vậy nó sẽ không được sử dụng làm khóa.

Tôi cũng sẽ sử dụng UQ và UQC (nếu được nhóm).

Bạn có thể sử dụng một chỉ mục duy nhất thay thế và đi đến "IXU". Theo logic được sử dụng, một chỉ mục cũng là một khóa nhưng chỉ khi duy nhất. Nếu không thì đó là một chỉ số. Vì vậy, sau đó chúng tôi bắt đầu với IK_columnnamecác chỉ mục duy nhất và IX_columnnamecho các chỉ mục không duy nhất. Kỳ diệu.

Và sự khác biệt duy nhất giữa một ràng buộc duy nhất và một chỉ mục duy nhất là các cột INCLUDE.

Chỉnh sửa: Tháng 2 năm 2013. Kể từ SQL Server 2008, các chỉ mục cũng có thể có các bộ lọc. Những ràng buộc không thể

Vì vậy, nó đi xuống một trong những

  • gắn bó với UQ theo phần còn lại của hành tinh sử dụng SQL
  • sử dụng IK cho các chỉ mục duy nhất (IKC cho cụm quá) để thống nhất ...

1
Bạn có thích "IXU" hơn "UIX" không?
Hamish Grubijan


133

Quy ước đặt tên của tôi cho các chỉ số và các ràng buộc:

  • Khóa chính. _PK
  • Chỉ số / ràng buộc duy nhất. _AK {xx}
  • Chỉ số không duy nhất. _IX {xx}
  • Kiểm tra ràng buộc. _CK {xx}
  • Ràng buộc mặc định. _DF {xx}
  • Hạn chế khóa ngoại. _FK {xx}

Trong đó {xx} là số thứ tự gồm 2 chữ số, bắt đầu từ 01 cho mỗi loại ràng buộc trên mỗi bảng. Khóa chính không nhận được số thứ tự vì chỉ có thể có một. Ý nghĩa hậu tố 2-char alpha là:

  • PK: Khóa chính
  • AK: Khóa thay thế
  • FK: Khóa ngoại
  • IX: Ấn Độ
  • CK: ChecK
  • DF: DeFault

Tôi thường muốn nhóm dữ liệu danh mục hệ thống / siêu dữ liệu theo đối tượng kiểm soát hơn là theo loại đối tượng.


10
AK: Khóa thay thế là thứ mà bề mặt thiết kế của SQL Server Data 2012 cũng gọi chúng.
Alex KeySmith

15
@AlexKeySmith: Cảm ơn bạn đã giải thích lý do tại sao Microsoft sử dụng AK cho việc này !!
TJ Crowder

Không có vấn đề gì @TJCrowder :-)
Alex KeySmith

@TJCrowder, trong thế giới mô hình hóa mối quan hệ thực thể / cơ sở dữ liệu, nó là một khóa thay thế , bởi vì, giống như khóa chính, tập hợp cột bao gồm khóa thay thế phải là duy nhất, do đó cung cấp nhận dạng [thay thế] cho hàng / tuple.
Nicholas Carey

@NicholasCarey: Không, tôi hiểu rồi - ngay khi tôi thấy bình luận của Alex, đèn bật sáng. :-)
TJ Crowder

5

Tôi sử dụng UQ. Chữ K ở Anh khiến tôi nghĩ về K vì nó được sử dụng trong PK và FK. Chà, sau khi tôi nghĩ về Vương quốc Anh dù sao đi nữa; mỉa mai rằng đây phải là tiền tố cho UNIQUE khi Vương quốc Anh đưa ra rất nhiều hiệp hội khác =)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.