Các quy ước đặt tên cơ sở dữ liệu, bảng và cột? [đóng cửa]


791

Bất cứ khi nào tôi thiết kế một cơ sở dữ liệu, tôi luôn tự hỏi liệu có cách tốt nhất để đặt tên một mục trong cơ sở dữ liệu của tôi không. Tôi thường tự hỏi mình những câu hỏi sau:

  1. Tên bảng có nên là số nhiều?
  2. Tên cột có nên là số ít?
  3. Tôi nên tiền tố bảng hoặc cột?
  4. Tôi có nên sử dụng bất kỳ trường hợp trong việc đặt tên các mặt hàng?

Có bất kỳ hướng dẫn được đề xuất ngoài kia để đặt tên các mục trong cơ sở dữ liệu?


7
Tôi nghĩ chúng ta nên đặt tên số nhiều cho Bảng và số ít cho các cột.
AZ_

7
Tôi thấy một bảng là "lưu trữ" với nhiều mục, không phải là "thực thể" duy nhất vì vậy tôi đặt tên cho nó là số nhiều. Khi tôi ánh xạ các bảng vào các đối tượng, tôi sẽ đặt tên cho các đối tượng là số ít. Đây chỉ là ý kiến ​​cá nhân của tôi.
dpp

2
@Tryinko Sử dụng ID ở khắp mọi nơi là SỐNG SỐNG cho bất kỳ ai tham gia nhiều bảng. Không có cách nào có thể là lợi thế nhỏ khi biết điều này là PK vượt xa sự khó chịu đáng kinh ngạc của việc đặt lại răng cưa cột dang trong mỗi truy vấn đẫm máu hết lần này đến lần khác. Nếu bạn muốn một cách để biểu thị PK trong bảng, hãy đặt nó thành cột đầu tiên. Ngoài ra, biểu thị FK trong tên của các cột là trong suy nghĩ của tôi một mô hình chống ác độc rắn khác.
ErikE 2/2/2016

2
Có một cái nhìn vào câu trả lời này .
PerformanceDBA

Câu trả lời:


315

Tôi khuyên bạn nên kiểm tra cơ sở dữ liệu mẫu SQL Server của Microsoft: https://github.com/Microsoft/sql-server-samples/release/tag/adventureworks

Mẫu AdventureWorks sử dụng quy ước đặt tên rất rõ ràng và nhất quán sử dụng tên lược đồ để tổ chức các đối tượng cơ sở dữ liệu.

  1. Tên số ít cho bảng
  2. Tên số ít cho các cột
  3. Tên lược đồ cho tiền tố bảng (Ví dụ: SchemeName.TableName)
  4. Vỏ Pascal (còn gọi là vỏ lạc đà trên)

14
wilsonmar.com/sql_adventureworks.htm là một phân tích tuyệt vời về lược đồ AdventureWorks.
Daniel Trebbien

209
Tôi sẽ không dựa vào Microsoft cho bất kỳ tiêu chuẩn nào - nếu bạn nhìn vào cơ sở dữ liệu về hướng gió của họ, bạn sẽ thấy họ sử dụng Bảng số nhiều, Tên cột số ít, Tiền tố Schema cho Bảng, Tiền tố bảng cho Cột khóa chính, Tiền tố ràng buộc tiếng Hungary và tệ nhất của tất cả SPACES "" cho tên bảng nhiều từ. Ngoài ra, các bảng hệ thống cho SQLServer sử dụng số nhiều nên có vẻ như AdventureWorks là con cừu đen trong nhóm này.
Marcus Pope

63
Tôi nghĩ vấn đề chính ở đây là đám đông tên bảng Singular dường như coi bảng là thực thể, chứ không phải là hàng trong bảng mà đám đông số nhiều làm. Bạn phải tự hỏi đó là cái gì Nếu bảng chỉ là một thùng chứa các hàng, việc sử dụng đặt tên số nhiều có hợp lý hơn không? Bạn sẽ không bao giờ đặt tên cho một bộ sưu tập theo mã số ít, vậy tại sao bạn lại đặt tên cho bảng số ít? Tại sao không thống nhất? Tôi nghe tất cả các đối số về cách chúng sắp xếp và sử dụng trong các phép nối nhưng tất cả các đối số đó có vẻ rất mỏng manh. Nếu tất cả đi vào sở thích, tôi sẽ đi với sự nhất quán và số nhiều.
Jason

4
Cũng xem xét hướng thủy triều đang đi. Có vẻ như nó đi theo hướng của tên bảng số nhiều vì tất cả các bảng hệ thống trong SQL Server đều là số nhiều và mặc định cho Entity Framework là số nhiều. Nếu đó là lập trường của Microsoft, tôi muốn đi theo hướng chúng ta sẽ ở trong 20 năm nữa. Ngay cả các quy ước cơ sở dữ liệu của Oracle cũng nói tên bảng số nhiều. Chỉ cần nghĩ có bao nhiêu nhà phát triển c # ghét từ khóa "var" khi nó được giới thiệu, bây giờ đây là cách được chấp nhận rộng rãi để xác định các biến.
Jason

7
@ Hoa nhài - Tôi thấy quan điểm của bạn, mặc dù tôi nghĩ rằng bạn vô tình đặt tên bảng mẫu của bạn ngược lại. "TableOfInvoices" nên được rút ngắn thành "Hóa đơn", đó là những gì tôi thích. Thay vào đó, bạn có thể có nghĩa là "InvoiceTable", có nghĩa là rút ngắn "Hóa đơn".
Derek

280

Câu trả lời muộn ở đây, nhưng tóm lại:

  1. Sở thích của tôi là số nhiều
  2. Đúng
  3. Bảng : * Thông thường * không có tiền tố là tốt nhất. Cột : Không.
  4. Cả bảng và cột: PascalCase.

Xây dựng:

(1) Những gì bạn phải làm. Có rất ít điều mà bạn phải làm theo một cách nhất định, mọi lúc, nhưng có một vài điều.

  • Đặt tên cho các khóa chính của bạn bằng định dạng "[singularOfTableName] ID". Nghĩa là, cho dù tên bảng của bạn là Khách hàng hay Khách hàng , khóa chính phải là ID khách hàng .
  • Hơn nữa, khóa ngoại phải được đặt tên nhất quán trong các bảng khác nhau. Nó là hợp pháp để đánh bại một người không làm điều này. Tôi sẽ trình bày rằng trong khi các ràng buộc khóa ngoài được xác định thường rất quan trọng, việc đặt tên khóa ngoại nhất quán luôn luôn quan trọng
  • Cơ sở dữ liệu của bạn phải có quy ước nội bộ . Mặc dù trong các phần sau, bạn sẽ thấy tôi rất linh hoạt, trong cơ sở dữ liệu, việc đặt tên phải rất nhất quán. Việc bảng của bạn dành cho khách hàng được gọi là Khách hàng hay Khách hàng ít quan trọng hơn việc bạn thực hiện theo cùng một cách trong cùng một cơ sở dữ liệu. Và bạn có thể lật một đồng xu để xác định cách sử dụng dấu gạch dưới, nhưng sau đó bạn phải tiếp tục sử dụng chúng theo cùng một cách . Nếu bạn không làm điều này, bạn là một người xấu nên có lòng tự trọng thấp.

(2) Những gì bạn có thể nên làm.

  • Các trường đại diện cho cùng một loại dữ liệu trên các bảng khác nhau nên được đặt tên giống nhau. Không có Zip trên một bảng và ZipCode trên một bảng khác.
  • Để tách các từ trong tên bảng hoặc cột của bạn, hãy sử dụng PascalCasing. Sử dụng camelCasing sẽ không có vấn đề gì về bản chất, nhưng đó không phải là quy ước và nó sẽ trông buồn cười. Tôi sẽ giải quyết dấu gạch dưới trong giây lát. (Bạn không thể sử dụng ALLCAPS như ngày xưa. OBNOXIOUSTABLE.ANNOYING_COLUMN đã ổn trong DB2 20 năm trước, nhưng không phải bây giờ.)
  • Đừng rút ngắn hoặc viết tắt các từ một cách giả tạo. Nó là tốt hơn cho một tên dài và rõ ràng hơn ngắn và khó hiểu. Tên siêu ngắn là một sự nắm giữ từ thời kỳ đen tối hơn, man rợ hơn. Cus_AddRef. Chuyện quái quỷ gì vậy? Tài liệu tham khảo người nhận giám sát? Hoàn tiền bổ sung của khách hàng? Địa chỉ giới thiệu tùy chỉnh?

(3) Những gì bạn nên xem xét.

  • Tôi thực sự nghĩ rằng bạn nên có tên số nhiều cho các bảng; một số nghĩ rằng số ít. Đọc các đối số ở nơi khác. Tên cột phải là số ít tuy nhiên. Ngay cả khi bạn sử dụng tên bảng số nhiều, các bảng biểu thị sự kết hợp của các bảng khác có thể ở dạng số ít. Ví dụ: nếu bạn có Khuyến mãiVật phẩm bảng , một bảng đại diện cho một mặt hàng là một phần của quảng cáo có thể là Khuyến mãi_Items, nhưng nó cũng có thể là Khuyến mãi_Điều này tôi nghĩ (phản ánh mối quan hệ một-nhiều).
  • Sử dụng dấu gạch dưới một cách nhất quán và cho một mục đích cụ thể. Chỉ cần các tên bảng chung là đủ rõ ràng với PascalCasing; bạn không cần gạch dưới để phân tách các từ. Lưu dấu gạch dưới (a) để chỉ ra bảng kết hợp hoặc (b) cho tiền tố, mà tôi sẽ giải quyết trong dấu đầu dòng tiếp theo.
  • Tiền tố không tốt hay xấu. Nó thường không phải là tốt nhất. Trong db hoặc hai đầu tiên của bạn, tôi sẽ không đề xuất sử dụng tiền tố cho nhóm các bảng theo chủ đề chung. Các bảng kết thúc không phù hợp với danh mục của bạn một cách dễ dàng và nó thực sự có thể làm cho việc tìm bảng khó khăn hơn . Với kinh nghiệm, bạn có thể lập kế hoạch và áp dụng sơ đồ tiền tố có lợi hơn là có hại. Tôi đã làm việc trong một db khi bảng dữ liệu bắt đầu bằng tbl , bảng cấu hình với ctbl , chế độ xem với vew , sp của Proc và udf's fnvà một vài người khác; nó được tỉ mỉ, áp dụng nhất quán để nó hoạt động ổn. Lần duy nhất bạn CẦN tiền tố là khi bạn có các giải pháp thực sự riêng biệt mà vì một lý do nào đó nằm trong cùng một db; tiền tố chúng có thể rất hữu ích trong việc nhóm các bảng. Tiền tố cũng ổn đối với các tình huống đặc biệt, như đối với các bảng tạm thời mà bạn muốn nổi bật.
  • Rất hiếm khi (nếu có) bạn muốn tiền tố cột.

11
"Các trường đại diện cho cùng một loại dữ liệu trên các bảng khác nhau nên được đặt tên giống nhau. Đừng có Zip trên một bảng và ZipCode trên một bảng khác." Có có một triệu lần có. Bạn có thể nói cơ sở dữ liệu của chúng tôi không được thiết kế theo cách đó? Một người có thể được giới thiệu theo bất kỳ cách nào trong hàng tá cách khác nhau, rất khó chịu để duy trì. Tôi đã luôn tuân thủ quy tắc này trong bất kỳ cơ sở dữ liệu nào mà tôi có quyền kiểm soát thiết kế và nó làm cho cuộc sống đơn giản hơn nhiều.
HLGEM

87
Tôi nghĩ khóa chính chỉ nên là "ID". Một quy ước đơn giản như vậy làm cho khóa chính có thể dự đoán được và nhanh chóng nhận dạng được. Tuy nhiên, tôi sẽ thêm tên bảng ("PersonID") khi nó được sử dụng làm khóa ngoại trong các bảng khác. Quy ước này có thể giúp phân biệt giữa khóa chính và khóa ngoại trong cùng một bảng.
Triynko

55
@Tryinko Sử dụng ID ở khắp mọi nơi là SỐNG SỐNG cho bất kỳ ai tham gia nhiều bảng. Không có cách nào có thể là lợi thế nhỏ khi biết điều này là PK lớn hơn sự khó chịu đáng kinh ngạc của việc đặt lại răng cưa cột dang trong mỗi truy vấn đẫm máu nhiều lần. Nếu bạn muốn một cách để biểu thị PK trong bảng, hãy đặt nó thành cột đầu tiên. Ngoài ra, biểu thị FK trong tên của các cột là trong suy nghĩ của tôi một mô hình chống ác độc rắn khác.
ErikE

18
@Triynko nếu bạn chỉ sử dụng "ID", nó cũng trở nên không thể xác định được bảng mà nó thuộc về. Với tiền tố tên bảng, bạn chỉ cần cắt hai chữ số cuối của khóa chính và biết tên bảng thuộc về thông qua mã. Rất nhiều lần người IT và DBA không nhận ra rằng có những lợi thế về mã hóa cho các lập trình viên trong việc thiết kế cơ sở dữ liệu theo những cách nhất định.
dallin

16
@ErikE Ý tôi là bạn không biết CustomerIDlà khóa chính từ Customerbảng hay khóa ngoại trong một số bảng khác. Đó là một vấn đề nhỏ. Tại sao bạn muốn sử dụng tên nghèo như thế cnào? CustomerID = Customer.IDrất rõ ràng ở chỗ bạn thấy rằng bạn đang tham gia khóa ngoại với khóa chính; nó không dư thừa vì hai bên là hai thứ khác nhau. Đặt tên nhân vật duy nhất là IMO thực hành kém.
Dave Cousineau

100

Ok, vì chúng tôi đang cân nhắc với ý kiến:

Tôi tin rằng tên bảng nên số nhiều. Bảng là một bộ sưu tập (một bảng) của các thực thể. Mỗi hàng đại diện cho một thực thể duy nhất và bảng đại diện cho bộ sưu tập. Vì vậy, tôi sẽ gọi một bảng gồm các thực thể Person People (hoặc Người, bất cứ điều gì làm bạn thích).

Đối với những người thích xem "tên thực thể" số ít trong các truy vấn, đó là những gì tôi sẽ sử dụng bí danh bảng cho:

SELECT person.Name
FROM People person

Một chút giống như "từ người trong người chọn người" của LINQ.

Đối với 2, 3 và 4, tôi đồng ý với @Lars.


17
@Emtucifor: Trong tiếng Anh, chúng tôi không nói "Hãy nhìn vào tất cả những người ngoài kia trong đám đông người đó!" Có một vấn đề về khái niệm với những thứ được nhiều người nhắc đến bằng một từ số ít sẽ được mong đợi. Nó không bình thường cũng không thích hợp. "Dữ liệu" là đặc biệt và thường được sử dụng để chỉ một phần của một khối lượng chất, giống như "bánh". "Bạn có muốn một miếng bánh không?" Đặt tên bảng là "Mọi người" vì nó chứa thông tin về nhiều cá nhân có ý nghĩa hơn nhiều so với đặt tên là "Người". Một lớp dữ liệu có tên "Người" cho ROW có ý nghĩa, cũng như các tên cột số ít.
Triynko

6
@Emtucifor: Cuối cùng, tất cả các ngôn ngữ là tùy ý và thông thường. Tôi chỉ tranh luận rằng thông thường chúng ta đề cập đến một bộ sưu tập các mặt hàng như là số nhiều của loại mặt hàng trong đó. Vì vậy, một tập hợp các hàng trong đó mỗi hàng có thông tin về một người sẽ được giới thiệu là một bộ sưu tập Mọi người. Nhưng nếu bạn muốn coi nó như một bộ sưu tập Person, hãy tiếp tục.
Triynko

3
@Emtucifor: Vâng, lol. Đặt tên cho bảng "PersonCollection" sẽ tương đương với việc đặt tên cho bảng "People". Ngược lại với việc đặt tên một bộ sưu tập như vậy chỉ là "Người", không có ý nghĩa gì :)
Triynko

4
@Emtucifor: Sau đó, hãy nghĩ về nó từ một góc độ khác để đặt quy ước đặt tên trong một bối cảnh. Giả sử bạn có các lớp đối tượng để biểu diễn cả hàng và bảng. "Người" rõ ràng có ý nghĩa đối với lớp đại diện cho một hàng dữ liệu. Nếu bảng của bạn cũng được đặt tên là "Người", thì bạn có thể có xung đột đặt tên hoặc một số nhầm lẫn. Tôi chỉ nghĩ rằng nó có ý nghĩa hơn để đặt tên các đối tượng với số nhiều chính xác. Một hàng có dữ liệu về một người nên được gọi là Người và một bảng có thông tin về người hoặc nhiều người được gọi là Người, Nhân vật, Người, v.v.
Triynko

5
@Josh M. Vâng, không phải một trong hai cách bạn đi. Nếu bạn đi theo cách của tôi, bạn có thể đặt bí danh cho bảng People là "người" và có người CHỌN. Vấn đề được giải quyết. ;-)
Matt Hamilton

73

Tôi làm việc trong một nhóm hỗ trợ cơ sở dữ liệu với ba DBA và các tùy chọn được xem xét của chúng tôi là:

  1. Bất kỳ tiêu chuẩn đặt tên là tốt hơn so với không có tiêu chuẩn.
  2. Không có tiêu chuẩn "một đúng", tất cả chúng ta đều có sở thích của mình
  3. Nếu đã có tiêu chuẩn, sử dụng nó. Đừng tạo ra một tiêu chuẩn khác hoặc làm vẩn đục các tiêu chuẩn hiện có.

Chúng tôi sử dụng tên số ít cho các bảng. Các bảng có xu hướng được thêm tiền tố với tên của hệ thống (hoặc từ viết tắt của nó). Điều này hữu ích nếu hệ thống phức tạp vì bạn có thể thay đổi tiền tố để nhóm các bảng lại với nhau một cách hợp lý (ví dụ: reg_customer, reg_booking và regadmin_limits).

Đối với các trường, chúng tôi mong muốn các tên trường sẽ bao gồm tiền tố / acryonm của bảng (ví dụ: obl_address1) và chúng tôi cũng thích sử dụng một bộ hậu tố tiêu chuẩn (_id cho PK, _cd cho "code", _nm cho "name ", _Nb cho" số ", _dt cho" Ngày ").

Tên của trường khóa Foriegn phải giống với trường Khóa chính.

I E

SELECT cust_nm, cust_add1, booking_dt
FROM reg_customer
INNER JOIN reg_booking
ON reg_customer.cust_id = reg_booking.cust_id

Khi phát triển một dự án mới, tôi khuyên bạn nên viết ra tất cả các tên thực thể, tiền tố và từ viết tắt ưa thích và cung cấp tài liệu này cho các nhà phát triển của bạn. Sau đó, khi họ quyết định tạo một bảng mới, họ có thể tham khảo tài liệu thay vì "đoán" những gì bảng và các trường nên được gọi.


9
Đặc biệt là đối với số 3, chúng tôi có một nhóm những người được thuê từ cùng một công ty và họ đã cố gắng áp đặt tiêu chuẩn đặt tên cũ của họ (điều mà không ai trong chúng tôi sử dụng) vào bất cứ điều gì họ làm. Rất phiền phức.
HLGEM

40
Chắc chắn làm cho SQL không thể đọc được; nhưng tôi nghĩ rằng tôi có thể dịch. mã xác thực phải là Tên khách hàng , booking_dt phải là TicketDate . reg_customer, tôi không biết đó là gì.
Ian Boyd

3
@Ian. Mục đích là bạn tuân theo cách đặt tên mà bạn đã sử dụng và giữ cho nó nhất quán. Tôi LUÔN biết rằng bất kỳ trường ngày nào là _dt, bất kỳ trường tên nào là _nm. 'reg' là một ví dụ về hệ thống "đăng ký" (đặt chỗ, khách hàng, v.v.) và tất cả các bảng liên quan sẽ có cùng một tiền tố. Nhưng mỗi người đều ...
Guy

7
tôi đồng ý rằng một tiêu chuẩn cụ thể không quan trọng bằng việc có một tiêu chuẩn nhất quán. Nhưng một số tiêu chuẩn là sai. Tên và cột của DB2 như CSPTCN, CSPTLN, CSPTMN, cơ sở dữ liệu. Mọi người nên biết rằng những cái tên dài đã được phát minh - chúng ta có thể đủ khả năng để làm cho mọi thứ có thể đọc được.
Ian Boyd

17
Trong suốt nhiều năm, tôi đã thêm các cột mới ở cuối các bảng của mình trong ứng dụng tôi đã phát triển và tiếp thị. Đôi khi, tôi sử dụng tên tiếng Anh trong các cột của mình, đôi khi tôi sử dụng tiếng Tây Ban Nha và đôi khi tôi sử dụng lại các cột cho mục đích khác, thay vì xóa chúng và thêm một cột mới với tên mô tả phù hợp cho những gì nó được sử dụng. Tôi cố tình làm điều này để OBFUSCATE mã nguồn của mình trong trường hợp người khác cố gắng hack hoặc thiết kế ngược mã của tôi. Chỉ có tôi mới hiểu được, người khác sẽ nản lòng! .. Bằng cách này, họ luôn phải dựa vào tôi vì bất cứ điều gì!
Frank R.

47
  1. Không. Một bảng nên được đặt tên theo thực thể mà nó đại diện. Người, không phải người là cách bạn sẽ đề cập đến bất cứ ai trong số các hồ sơ đại diện.
  2. Một lần nữa, điều tương tự. Cột FirstName thực sự không nên được gọi là FirstNames. Tất cả phụ thuộc vào những gì bạn muốn đại diện với cột.
  3. KHÔNG.
  4. Đúng. Trường hợp nó cho rõ ràng. Nếu bạn cần phải có các cột như "FirstName", vỏ sẽ giúp bạn dễ đọc hơn.

Đồng ý. Đó là 0,02 đô la của tôi


5
Thêm một số sự rõ ràng vào số 3 - tiền tố là một cách nhúng siêu dữ liệu vào tên cột. Không cần phải làm điều này trong bất kỳ DB hiện đại nào vì những lý do tương tự như (lạm dụng) ký hiệu Hungary.
Đánh dấu McDonald

21
'chọn top 15 từ đơn hàng' hay 'chọn top 15 từ đơn hàng'? Thứ hai là sở thích (con người) của tôi.
Ian Boyd

8
@Ian Boyd: Yep: CHỌN TOP 100 * TỪ Báo cáo R THAM GIA Tham gia Truy cập VR ON R.ReportID = VR.ReportID. Tất cả phụ thuộc vào cách bạn nghĩ về nó. Nếu bạn đặt một hình ảnh của một quả chanh trên một hộp, bạn sẽ biết có những quả chanh bên trong, mà không cần hai quả chanh ở bên ngoài để chỉ ra rằng nó có thể là số nhiều. Chắc chắn, bạn có thể gắn nhãn nó với chữ viết "chanh." Nhưng nó cũng có thể là "chanh". Để có được tài nguyên có tên là "chanh", hãy vào đây.
ErikE

6
thêm 0,01 đô la để sử dụng UpperCase trong tên cột và thêm 0,01 đô la khác để sử dụng dấu gạch dưới trong tên cột để dễ phân biệt tên cột trong tầm nhìn rõ ràng. Tổng cộng = 0,02 đô la của tôi cho bạn!
Frank R.

6
"Một bảng nên được đặt tên theo thực thể mà nó đại diện" Bảng là một tập hợp các thực thể. Trong khi một bảng cũng là một thực thể, nó là một thực thể của loại "Bảng", vô nghĩa để thêm vào tên của nó.
Đã xem

34

Tôi cũng ủng hộ quy ước đặt tên theo phong cách ISO / IEC 11179, lưu ý rằng chúng là hướng dẫn chứ không phải là quy định.

Xem tên thành phần dữ liệu trên Wikipedia :

"Các bảng là Bộ sưu tập của các Thực thể và tuân theo các nguyên tắc đặt tên Bộ sưu tập. Lý tưởng nhất là sử dụng tên tập thể: ví dụ: Nhân sự. Số nhiều cũng đúng: Nhân viên. Tên không chính xác bao gồm: Nhân viên, tblEmployee và EmployeeTable."

Như mọi khi, có các ngoại lệ cho các quy tắc, ví dụ: một bảng luôn có chính xác một hàng có thể tốt hơn với một tên số ít, ví dụ như bảng cấu hình. Và tính nhất quán là vô cùng quan trọng: kiểm tra xem cửa hàng của bạn có một quy ước hay không và nếu có, hãy tuân theo nó; nếu bạn không thích nó thì hãy làm một trường hợp kinh doanh để thay đổi nó chứ không phải là người kiểm lâm đơn độc.


-1: Văn bản được tham chiếu không liên quan gì đến ISO / IEC 11179. Không nên tin cậy trang wikipedia được tham chiếu; thay vào đó hãy đọc tiêu chuẩn thực tế ( metadata-stiterias.org/11179/#A5 )
mkadunc

@encedaywhen: Tôi không biết đủ về chủ đề để sửa trang wikipedia; Ngoài ra, trang wikipedia không sai nhiều vì nó gây hiểu lầm - không nói rõ ràng rằng ISO / IEC 11179 bao gồm các quy ước đặt tên cơ sở dữ liệu, nó chỉ nói rằng "ISO / IEC 11179 có thể áp dụng khi đặt tên bảng và cột trong một cơ sở dữ liệu quan hệ". Sau đó, nó tiếp tục cung cấp một ví dụ về các quy ước đặt tên có thể được sử dụng cho cơ sở dữ liệu quan hệ. Nó cho phép bạn nghĩ rằng ví dụ này là một cái gì đó được lấy từ tiêu chuẩn, khi nó thực sự là thứ được tạo ra bởi người viết bài báo wikipedia.
mkadunc

27

Tôi nghe lập luận tất cả thời gian rằng một bảng có số nhiều hay không đều là vấn đề sở thích cá nhân và không có cách thực hành tốt nhất. Tôi không tin đó là sự thật, đặc biệt là một lập trình viên trái ngược với DBA. Theo như tôi biết, không có lý do chính đáng nào để số nhiều tên bảng khác ngoài "Nó chỉ có ý nghĩa với tôi vì đó là một tập hợp các đối tượng", trong khi có những lợi ích hợp pháp trong mã bằng cách có tên bảng số ít. Ví dụ:

  1. Nó tránh các lỗi và sai lầm gây ra bởi sự mơ hồ số nhiều. Các lập trình viên không biết chính xác về chuyên môn chính tả của họ, và số nhiều từ gây nhầm lẫn. Ví dụ: từ số nhiều kết thúc bằng 'es' hay chỉ 's'? Là người hay người? Khi bạn làm việc trong một dự án với các nhóm lớn, điều này có thể trở thành một vấn đề. Ví dụ, một trường hợp trong đó một thành viên trong nhóm sử dụng phương thức không chính xác để số nhiều bảng mà anh ta tạo. Vào thời điểm tôi tương tác với bảng này, nó được sử dụng toàn bộ trong mã mà tôi không có quyền truy cập hoặc sẽ mất quá nhiều thời gian để sửa. Kết quả là tôi phải nhớ đánh vần sai bảng mỗi lần tôi sử dụng nó. Một cái gì đó rất giống với điều này đã xảy ra với tôi. Bạn càng dễ dàng tạo điều kiện cho mọi thành viên trong nhóm sử dụng chính xác và dễ dàng, Tên bảng chính xác mà không có lỗi hoặc phải tìm kiếm tên bảng mọi lúc, tốt hơn. Phiên bản số ít dễ xử lý hơn trong môi trường nhóm.

  2. Nếu bạn sử dụng phiên bản số ít của tên bảng VÀ tiền tố khóa chính với tên bảng, giờ đây bạn có lợi thế là dễ dàng xác định tên bảng từ khóa chính hoặc ngược lại chỉ qua mã. Bạn có thể được cung cấp một biến có tên bảng trong đó, nối "Id" ở cuối và bây giờ bạn có khóa chính của bảng thông qua mã mà không phải thực hiện truy vấn bổ sung. Hoặc bạn có thể cắt "Id" từ cuối khóa chính để xác định tên bảng thông qua mã. Nếu bạn sử dụng "id" mà không có tên bảng cho khóa chính, thì bạn không thể thông qua mã xác định tên bảng từ khóa chính. Ngoài ra, hầu hết những người số nhiều tên bảng và tiền tố cột PK với tên bảng sử dụng phiên bản số ít của tên bảng trong PK (ví dụ: status và status_id),

  3. Nếu bạn đặt tên bảng là số ít, bạn có thể đặt chúng khớp với tên lớp mà chúng đại diện. Một lần nữa, điều này có thể đơn giản hóa mã và cho phép bạn thực hiện những việc thực sự gọn gàng, như khởi tạo một lớp bằng cách không có gì ngoài tên bảng. Nó cũng chỉ làm cho mã của bạn nhất quán hơn, dẫn đến ...

  4. Nếu bạn đặt tên bảng là số ít, nó làm cho sơ đồ đặt tên của bạn nhất quán, có tổ chức và dễ duy trì ở mọi vị trí. Bạn biết rằng trong mọi trường hợp trong mã của bạn, cho dù đó là tên cột, như tên lớp hay tên bảng, thì đó là cùng một tên chính xác. Điều này cho phép bạn thực hiện các tìm kiếm toàn cầu để xem mọi nơi dữ liệu được sử dụng. Khi bạn số nhiều tên bảng, sẽ có trường hợp bạn sẽ sử dụng phiên bản số ít của tên bảng đó (lớp mà nó biến thành, trong khóa chính). Nó chỉ có ý nghĩa để không có một số trường hợp trong đó dữ liệu của bạn được gọi là số nhiều và một số trường hợp số ít.

Tóm lại, nếu bạn đa dạng hóa tên bảng của mình, bạn sẽ mất tất cả các loại lợi thế trong việc làm cho mã của bạn thông minh hơn và dễ xử lý hơn. Thậm chí có thể có trường hợp bạn phải có bảng / mảng tra cứu để chuyển đổi tên bảng thành tên đối tượng hoặc tên mã cục bộ mà bạn có thể tránh. Tên bảng số ít, mặc dù có thể cảm thấy hơi kỳ lạ lúc đầu, cung cấp những lợi thế đáng kể so với tên số nhiều và tôi tin là thực tiễn tốt nhất.


26

sở thích của chúng tôi:

  1. Tên bảng có nên là số nhiều?
    Không bao giờ. Các đối số cho nó là một bộ sưu tập có ý nghĩa, nhưng bạn không bao giờ biết bảng sẽ chứa gì (0,1 hoặc nhiều mục). Quy tắc số nhiều làm cho việc đặt tên phức tạp không cần thiết. 1 Nhà, 2 nhà, chuột vs chuột, người với người và chúng tôi thậm chí không nhìn vào bất kỳ ngôn ngữ nào khác.

    Update person set property = 'value'hành động trên mỗi người trong bảng.
    Select * from person where person.name = 'Greg'trả về một bộ sưu tập / hàng của hàng người.

  2. Tên cột có nên là số ít?
    Thông thường, có, ngoại trừ nơi bạn đang phá vỡ các quy tắc bình thường hóa.

  3. Tôi nên tiền tố bảng hoặc cột?
    Chủ yếu là một sở thích nền tảng. Chúng tôi thích các cột tiền tố với tên bảng. Chúng tôi không có các bảng tiền tố, nhưng chúng tôi thực hiện các chế độ xem tiền tố (v_) và archive_procedures (sp_ hoặc f_ (function)). Điều đó giúp những người muốn cố gắng cập nhật v_person.age thực sự là một trường được tính toán trong một chế độ xem (dù sao đó cũng không thể là CẬP NHẬT).

    Đó cũng là một cách tuyệt vời để tránh xung đột từ khóa (Delivery.from break, nhưng deliver_from thì không).

    Nó làm cho mã dài dòng hơn, nhưng thường hỗ trợ khả năng đọc.

    bob = new person()
    bob.person_name = 'Bob'
    bob.person_dob = '1958-12-21'
    ... Rất dễ đọc và rõ ràng. Điều này có thể ra khỏi tầm tay mặc dù:

    customer.customer_customer_type_id

    biểu thị mối quan hệ giữa khách hàng và bảng customer_type, cho biết khóa chính trên bảng customer_type (customer_type_id) và nếu bạn từng thấy 'customer_customer_type_id' trong khi gỡ lỗi truy vấn, bạn sẽ biết ngay nó đến từ đâu (bảng khách hàng).

    hoặc nơi bạn có mối quan hệ MM giữa customer_type và customer_carget (chỉ một số loại nhất định có sẵn cho các danh mục nhất định)

    customer_category_customer_type_id

    ... là một chút (!) ở phía dài.

  4. Tôi có nên sử dụng bất kỳ trường hợp trong việc đặt tên các mặt hàng? Có - chữ thường :), với dấu gạch dưới. Đây là rất dễ đọc và đa nền tảng. Cùng với 3 ở trên nó cũng có ý nghĩa.

    Hầu hết trong số này là sở thích mặc dù. - Miễn là bạn nhất quán, nó sẽ được dự đoán cho bất cứ ai phải đọc nó.


1
SELECT * FROM people AS person WHERE person.name = 'Greg'Âm thanh tự nhiên nhất đối với tôi.
Kenmore

1
@Zuko Hầu hết, quy ước đặt tên cho khóa chính của bảng là <table name><id>, ví dụ PersonIDhoặc Person_IDv.v. Do đó, điều hợp lý hơn là bạn KHÔNG đặt tên bảng của mình ở số nhiều vì mỗi bản ghi là một người riêng biệt chứ không phải người.
Ông Blond


15

Tôi biết điều này đã muộn với trò chơi và câu hỏi đã được trả lời rất tốt, nhưng tôi muốn đưa ra ý kiến ​​của mình về # 3 liên quan đến tiền tố của tên cột.

Tất cả các cột phải được đặt tên bằng một tiền tố duy nhất cho bảng mà chúng được xác định.

Ví dụ: Cho trước các bảng "khách hàng" và "địa chỉ", chúng ta hãy đi với các tiền tố tương ứng là "trông coi" và "addr". "khách hàng" sẽ có "obl_id", "obl_name", v.v. "địa chỉ" sẽ có "addr_id", "addr_cust_id" (FK trở lại khách hàng), "addr_street", v.v.

Khi tôi lần đầu tiên được trình bày với tiêu chuẩn này, tôi đã quyết định chống lại nó; Tôi ghét ý tưởng. Tôi không thể chịu được ý tưởng về việc gõ thêm và dự phòng. Bây giờ tôi đã có đủ kinh nghiệm với nó mà tôi sẽ không bao giờ quay trở lại.

Kết quả của việc này là tất cả các cột trong lược đồ cơ sở dữ liệu của bạn là duy nhất. Có một lợi ích lớn cho việc này, đó là bỏ qua tất cả các lập luận chống lại nó (tất nhiên theo ý kiến ​​của tôi):

Bạn có thể tìm kiếm toàn bộ cơ sở mã của mình và tìm thấy mọi dòng mã chạm vào một cột cụ thể.

Lợi ích từ # 1 là vô cùng lớn. Tôi có thể phản đối một cột và biết chính xác những tập tin nào cần được cập nhật trước khi cột có thể được gỡ bỏ khỏi lược đồ một cách an toàn. Tôi có thể thay đổi ý nghĩa của một cột và biết chính xác mã nào cần được cấu trúc lại. Hoặc đơn giản là tôi có thể biết liệu dữ liệu từ một cột thậm chí có được sử dụng trong một phần cụ thể của hệ thống hay không. Tôi không thể đếm số lần điều này đã biến một dự án khổng lồ tiềm năng thành một dự án đơn giản, cũng không phải là số giờ chúng tôi đã tiết kiệm được trong công việc phát triển.

Một lợi ích tương đối nhỏ khác là bạn chỉ phải sử dụng bí danh bảng khi bạn tự tham gia:

SELECT cust_id, cust_name, addr_street, addr_city, addr_state
    FROM customer
        INNER JOIN address ON addr_cust_id = cust_id
    WHERE cust_name LIKE 'J%';

1
Sau đó, bạn không còn có thể reliably find every line of code that touches a particular column... Đó không phải là vấn đề?
raveren

6
@Raveren - Bạn vẫn có thể. Nếu tất cả những gì bạn làm là "CHỌN *", thì truy vấn không liên quan cho mục đích này. Khi / Nếu sau này, bạn sử dụng kết quả của truy vấn đó, bạn phải sử dụng tên cột để thực hiện điều gì đó với dữ liệu của nó, vì vậy đó là nơi bạn cần lo lắng trong mã của mình chứ không phải câu lệnh SQL.
Granger

Tôi có tò mò không biết tình huống nào cần CHỌN *? Tôi chắc chắn sẽ không muốn bất cứ ai sử dụng nó trong mã sản xuất. Có, nó rất hữu ích cho các truy vấn đặc biệt và để tìm ra phần dữ liệu nào làm cho kết quả truy vấn nhiều lần tham gia của bạn trở nên kỳ lạ, nhưng tôi có thể nghĩ rằng không có vị trí nào trong mã sản xuất được yêu cầu.
HLGEM

2
Trừ khi bạn đang mã hóa toàn bộ ứng dụng của mình bằng ngôn ngữ không phải OO, thì việc có một lớp ORM hợp lý sẽ khiến cho đối số này trở nên dư thừa.
Adam

6
Vì vậy, do câu trả lời này, tôi đã quyết định thử sử dụng tiền tố bảng cho một dự án lớn và nghĩ rằng tôi sẽ báo cáo lại. Nó đã làm cho các bảng tái cấu trúc cực kỳ dễ dàng, thật tuyệt vời! Tuy nhiên, đó là một nỗi đau lớn hơn tôi dự đoán. Cơ sở dữ liệu của chúng tôi có rất nhiều bảng có tên phức tạp. Thật dễ nhớ Cust là tiền tố cho Khách hàng, nhưng không dễ nhớ tiền tố cho HazardVerifyingMethod. Mỗi lần tôi viết một bảng hoặc trường tôi phải tạm dừng để suy nghĩ về tiền tố. Cuối cùng, tôi quyết định tốc độ và sự tiện lợi quan trọng hơn khả năng tìm kiếm, nhưng tôi cảm thấy đó là một kinh nghiệm quý giá.
dallin

15

Ý kiến ​​của tôi về những điều này là:

1) Không, tên bảng nên là số ít.

Mặc dù nó có vẻ có ý nghĩa đối với lựa chọn đơn giản ( select * from Orders) nhưng nó có ý nghĩa ít hơn đối với tương đương OO ( Orders x = new Orders).

Một bảng trong DB thực sự là tập hợp của thực thể đó, nó có ý nghĩa hơn một khi bạn đang sử dụng logic tập hợp:

select Orders.*
from Orders inner join Products
    on Orders.Key = Products.Key

Dòng cuối cùng, logic thực tế của phép nối, trông khó hiểu với tên bảng số nhiều.

Tôi không chắc chắn về việc luôn luôn sử dụng bí danh (như Matt gợi ý) sẽ xóa điều đó.

2) Họ nên là số ít vì họ chỉ nắm giữ 1 tài sản

3) Không bao giờ, nếu tên cột không rõ ràng (như trên, trong đó cả hai đều có một cột được gọi là [Khóa]), tên của bảng (hoặc bí danh của nó) có thể phân biệt chúng đủ tốt. Bạn muốn các truy vấn được nhập nhanh và đơn giản - tiền tố thêm độ phức tạp không cần thiết.

4) Dù bạn muốn, tôi muốn đề xuất CapitalCase

Tôi không nghĩ có một bộ hướng dẫn tuyệt đối về bất kỳ trong số này.

Miễn là bất cứ điều gì bạn chọn là nhất quán trên ứng dụng hoặc DB, tôi không nghĩ nó thực sự quan trọng.


3
Cái quái CapitalCasegì thế này ?
ViRuSTriNiTy

@ViRuSTriNiTy có lẽ là ôngpascal case
marctrem

Keith, ở số 3 tôi làm cả hai, và tôi không nhất quán (nhưng tôi lạc đề), nhưng tôi không hiểu tại sao lại có một tên cột mô tả miễn là nó không quá mức, cùng với một bảng, một biến, v.v.
johnny

@johnny nó không tệ, như vậy, chỉ là không cần thiết. Tại sao gõ những thứ bạn không phải làm? Cũng IntelliSense nhất chủ yếu sử dụng đầu của tên, vì vậy nếu bạn có Product.ProductName, Product.ProductID, Product.ProductPricevv gõ Product.Pcung cấp cho bạn tất cả các lĩnh vực tiền tố.
Keith

13

Theo ý kiến ​​của tôi:

  1. Tên bảng nên là số nhiều.
  2. Tên cột phải là số ít.
  3. Không.
  4. CamelCase (ưu tiên của tôi) hoặc gạch dưới_separated cho cả tên bảng và tên cột.

Tuy nhiên, giống như nó đã được đề cập, bất kỳ quy ước nào là tốt hơn so với không có quy ước. Cho dù bạn chọn cách nào để thực hiện nó, hãy ghi lại nó để các sửa đổi trong tương lai tuân theo các quy ước tương tự.


1
liên quan đến số 4, PascalCase ... camelCase ... Snake_case ...
Andrew

11

Tôi nghĩ rằng câu trả lời tốt nhất cho mỗi câu hỏi sẽ được đưa ra bởi bạn và nhóm của bạn. Điều quan trọng hơn nhiều là có một quy ước đặt tên sau đó chính xác là quy ước đặt tên như thế nào.

Vì không có câu trả lời đúng cho điều đó, bạn nên dành chút thời gian (nhưng không quá nhiều) và chọn các quy ước của riêng bạn và - đây là phần quan trọng - tuân theo nó.

Tất nhiên, thật tốt khi tìm kiếm một số thông tin về các tiêu chuẩn về điều đó, đó là những gì bạn đang hỏi, nhưng đừng lo lắng hay lo lắng về số lượng câu trả lời khác nhau mà bạn có thể nhận được: chọn câu trả lời có vẻ tốt hơn cho bạn.

Chỉ trong trường hợp, đây là câu trả lời của tôi:

  1. Đúng. Một bảng là một nhóm các hồ sơ , giáo viên hoặc diễn viên , vì vậy ... số nhiều.
  2. Đúng.
  3. Tôi không sử dụng chúng.
  4. Cơ sở dữ liệu tôi sử dụng thường xuyên hơn - Firebird - giữ mọi thứ ở dạng chữ hoa, vì vậy nó không thành vấn đề. Dù sao, khi tôi lập trình, tôi viết tên theo cách dễ đọc hơn, như phát hànhYear .

11
  1. Chắc chắn giữ tên bảng số ít, người không phải người
    1. Tương tự ở đây
    2. Không. Tôi đã thấy một số tiền tố khủng khiếp, đi xa đến mức nói rõ những gì đang xử lý là một bảng (tbl_) hoặc thủ tục lưu trữ người dùng (usp_). Tiếp theo là tên cơ sở dữ liệu ... Đừng làm điều đó!
    3. Đúng. Tôi có xu hướng PascalCase tất cả các tên bảng của tôi

28
CHÚA ƠI. KHÔNG. Tên bảng DEFINITELY số nhiều. Đó là một bộ sưu tập. Nó có nhiều thứ trong đó. "chọn * từ NHÂN DÂN". Bạn không chọn từ một người, bạn đang chọn từ nhiều NGƯỜI!
Triynko

4
Tôi luôn thích cách câu lệnh chọn nghe hay hơn nếu nó ở dạng số nhiều. SELECT id,name FROM contacts WHERE email_address LIKE '%gmail%'bảng số nhiều, cột số ít. Một lần nữa luôn luôn là một vấn đề quan điểm cá nhân.
scunliffe

tiền tố tbl, qry, v.v ... có thể cực kỳ hữu ích khi bạn xử lý siêu dữ liệu cơ sở dữ liệu, Nếu bạn đang kiểm tra đối tượng trong cơ sở dữ liệu có quy ước đặt tên đơn giản, nhanh chóng có thể tăng tốc độ hiểu một cách đáng kể
Cruachan

9

Các quy ước đặt tên cho phép nhóm phát triển thiết kế khả năng khám phá và khả năng bảo trì tại trung tâm của dự án.

Một quy ước đặt tên tốt cần có thời gian để phát triển nhưng một khi nó được thực hiện, nó cho phép nhóm tiến lên với một ngôn ngữ chung. Một quy ước đặt tên tốt phát triển hữu cơ với dự án. Một quy ước đặt tên tốt dễ dàng đối phó với các thay đổi trong giai đoạn dài nhất và quan trọng nhất của vòng đời phần mềm - quản lý dịch vụ trong sản xuất.

Đây là câu trả lời của tôi:

  1. Có, tên bảng nên ở dạng số nhiều khi chúng đề cập đến một tập hợp các giao dịch , chứng khoán hoặc đối tác chẳng hạn.
  2. Đúng.
  3. Đúng. Các bảng SQL có tiền tố là tb_, các khung nhìn có tiền tố vw_, các thủ tục được lưu trữ có tiền tố usp_ và các kích hoạt được tiền tố tg_ theo sau là tên cơ sở dữ liệu.
  4. Tên cột nên được viết thường bằng dấu gạch dưới.

Đặt tên rất khó nhưng trong mọi tổ chức đều có người có thể đặt tên cho mọi thứ và trong mọi nhóm phần mềm nên có người chịu trách nhiệm về tiêu chuẩn đặt tên và đảm bảo rằng việc đặt tên các vấn đề như sec_id , sec_valuesecurity_id sẽ được giải quyết sớm trước khi họ bị cuốn vào dự án .

Vậy các nguyên lý cơ bản của một quy ước và tiêu chuẩn đặt tên tốt là gì: -

  • Sử dụng ngôn ngữ của khách hàng và miền giải pháp của bạn
  • Hãy mô tả
  • Hãy kiên định
  • Định hướng, phản ánh và tái cấu trúc
  • Đừng sử dụng chữ viết tắt trừ khi chúng rõ ràng với mọi người
  • Không sử dụng các từ khóa dành riêng SQL làm tên cột

3
bảng là theo quan hệ định nghĩa. trong thực tế là số ít. tiền tố hút. Bạn đã bao giờ cần phải thay đổi một bảng thành một khung nhìn hoặc ngược lại? hãy thử với tiền tố. nó có gì khác biệt nếu nó là một khung nhìn hay một cái bàn?
William Jones

Tiền tố có thể giúp nơi chúng ta có cùng tên cho hai đối tượng - giống như hàm và thủ tục được lưu trữ. Tôi sẽ có một hàm với tên là 'GetApproverList' và với cùng tên tôi muốn tạo một thủ tục được lưu trữ sẽ gọi hàm này trong nội bộ. Sql sẽ không cho phép tạo hai đối tượng có cùng tên.
Ravinder Singh


7
SELECT 
   UserID, FirstName, MiddleInitial, LastName
FROM Users
ORDER BY LastName

2
Lưu ý các tiêu chuẩn được sử dụng: các bảng chứa nhiều thứ, người dùng có một tên, từ khóa T-SQL viết hoa, định nghĩa bảng trong trường hợp Pascal.
Ian Boyd

3
lỗi đánh máy: Lastnamenên làLastName
aminimalanimal

1
Tên bảng phải là số ít, ví dụ: Người dùng thay vì Người dùng
AZ_

Và lưu ý cách tên bảng là số nhiều; khi họ giữ Người dùng , không phải Người dùng .
Ian Boyd

5

Tên bảng phải luôn là số ít, vì chúng đại diện cho một tập hợp các đối tượng. Như bạn nói bầy đàn chỉ định một nhóm cừu, hoặc đàn làm chỉ định một nhóm chim. Không cần số nhiều. Khi một tên bảng là thành phần của hai tên và quy ước đặt tên ở số nhiều, sẽ khó biết được tên số nhiều nên là từ đầu tiên hay từ thứ hai hoặc cả hai. Đó là logic - Object.instance, không phải object.instance. Hoặc TableName.column, không phải TableNames.column. Microsoft SQL không phân biệt chữ hoa chữ thường, việc đọc tên bảng dễ dàng hơn, nếu sử dụng chữ in hoa, để phân tách tên bảng hoặc cột khi chúng bao gồm hai hoặc nhiều tên.


2
Một đàn là một nhóm cừu . Một Userkhông một nhóm người dùng.
EricRobertBrewer

4

Tên bảng: Nó phải là số ít, vì nó là một thực thể số ít đại diện cho một đối tượng trong thế giới thực chứ không phải các đối tượng, là số ít.

Tên cột dọc: Chỉ nên là số ít sau đó nó truyền tải rằng nó sẽ giữ một giá trị nguyên tử và sẽ xác nhận với lý thuyết chuẩn hóa. Tuy nhiên, nếu có n số thuộc tính cùng loại, thì chúng phải được thêm vào 1, 2, ..., n, v.v.

Tiền tố Bảng / Cột: Đây là một chủ đề rất lớn, sẽ thảo luận sau.

Vỏ bọc: Nó phải là vỏ lạc đà

Bạn của tôi, Patrick Karcher , tôi yêu cầu bạn vui lòng không viết bất cứ điều gì có thể gây khó chịu cho ai đó, như bạn đã viết, "• Hơn nữa, các khóa ngoại phải được đặt tên liên tục trong các bảng khác nhau. Nên đánh bại một người không hợp pháp làm cái này.". Tôi chưa bao giờ mắc lỗi này, bạn Patrick của tôi, nhưng tôi thường viết. Điều gì sẽ xảy ra nếu họ cùng nhau lên kế hoạch đánh bại bạn vì điều này? :)


2
Vì vậy, bạn đang nói bảng là thực thể? Hoặc là hàng trong bảng là thực thể? Đối với tôi một bảng là một tập hợp các hàng - do đó một tập hợp các thực thể ngụ ý số nhiều.
Jason

4

Đến bữa tiệc rất muộn nhưng tôi vẫn muốn thêm hai xu của mình về tiền tố cột

Dường như có hai đối số chính để sử dụng tiêu chuẩn đặt tên tên bảng_column (hoặc tên bảng) cho các cột, cả hai đều dựa trên thực tế là tên cột sẽ là duy nhất trên toàn bộ cơ sở dữ liệu của bạn:

1) Bạn không phải chỉ định tên bảng và / hoặc bí danh cột trong các truy vấn của mình mọi lúc

2) Bạn có thể dễ dàng tìm kiếm toàn bộ mã của mình cho tên cột

Tôi nghĩ rằng cả hai đối số là thiếu sót. Giải pháp cho cả hai vấn đề mà không sử dụng tiền tố là dễ dàng. Đây là đề xuất của tôi:

Luôn sử dụng tên bảng trong SQL của bạn. Ví dụ: luôn luôn sử dụng bảng.column thay vì cột.

Nó rõ ràng giải quyết được 2) vì bây giờ bạn có thể chỉ cần tìm kiếm bảng.column thay vì table_column.

Nhưng tôi có thể nghe bạn hét lên, làm thế nào để giải quyết 1)? Đó là chính xác về việc tránh điều này. Vâng, đó là, nhưng giải pháp là thiếu sót khủng khiếp. Tại sao? Chà, giải pháp tiền tố rút gọn thành:
Để tránh phải chỉ định bảng.column khi có sự mơ hồ, bạn đặt tên cho tất cả các cột của mình là table_column!
Nhưng điều này có nghĩa là từ bây giờ, LUÔN LUÔN phải viết tên cột mỗi khi bạn chỉ định một cột. Nhưng nếu bạn phải làm điều đó dù sao đi nữa, lợi ích của việc luôn luôn viết bảng.column là gì? Chính xác, không có lợi ích, đó chính xác là cùng số lượng ký tự để nhập.

chỉnh sửa: có, tôi biết rằng việc đặt tên cho các cột với tiền tố bắt buộc sử dụng đúng trong khi cách tiếp cận của tôi phụ thuộc vào các lập trình viên


1
Như bạn đã đề cập, bạn không thể dựa vào mọi trường hợp có bảng.column. Các lập trình viên sẽ quên ở một nơi và sau đó toàn cầu tìm và thay thế toàn bộ chương trình của bạn. Hoặc bạn sẽ biến nó thành một quy tắc và ai đó sẽ nghĩ rằng anh ta đang thực hiện quy tắc bằng cách sử dụng bí danh của bảng, do đó một lần nữa cho phép tìm kiếm toàn cầu. Ngoài ra, nếu bạn muốn tổ chức mã của mình bằng cách có một loại lớp cơ sở dữ liệu (mà bất kỳ lập trình viên giỏi nào cũng sẽ có), sẽ có lúc bạn chỉ chuyển một tên cột cho hàm db hoặc chỉ có một tên cột trong một biến số.
dallin

2
@janb: Tôi hoàn toàn ủng hộ câu trả lời của bạn. Tôi cũng muốn thêm rằng sử dụng tìm kiếm văn bản để tìm phụ thuộc là cách man rợ để điều hướng mã. Một khi mọi người thoát khỏi thực tiễn tìm kiếm man rợ đó - họ sẽ bắt đầu sử dụng cách đặt tên tốt, đó là table.column. Vì vậy, vấn đề không phải là phong cách đặt tên, vấn đề là các công cụ xấu được thực hiện cho những kẻ man rợ.
alpav 17/2/2015

Lập luận của bạn là thiếu sót. Vấn đề với nó là nó hoạt động cả hai cách và không thêm bất kỳ lợi thế nào. Bạn nói, để giải quyết điều này, chỉ cần luôn luôn viết bảng.column, vì bạn đã viết bảng_column. Chà, bạn cũng có thể nói chỉ cần viết bảng_column vì bạn đã viết bảng.column. Nói cách khác, không có sự khác biệt giữa câu trả lời của bạn ngoài việc đưa ra các lỗi có thể xảy ra và không thực thi các quy ước. Đó là lý do chúng tôi có một từ khóa 'riêng tư'. Chúng tôi có thể tin tưởng các lập trình viên luôn sử dụng các biến lớp một cách chính xác, nhưng từ khóa thực thi nó và loại bỏ các lỗi có thể xảy ra.
dallin

3

Các quy ước đặt tên cơ sở dữ liệu cần thiết (và kiểu) (bấm vào đây để mô tả chi tiết hơn)

Tên bảng chọn tên ngắn gọn, không rõ ràng, sử dụng không quá một hoặc hai từ để phân biệt bảng dễ dàng tạo điều kiện cho việc đặt tên của tên trường duy nhất cũng như bảng tra cứu và liên kết cho bảng tên số ít, không bao giờ đồng ý với các lý do được đưa ra cho quy ước này, nhưng hầu hết mọi người thực sự thích tên bảng số nhiều, vì vậy tôi đã làm dịu lập trường của mình) ... vui lòng theo liên kết ở trên


1
mặc dù những gì Oracle đề nghị nó hoàn toàn ngược lại với liên kết linke ở trên. tìm thấy những gì Oracle nói ở đây .. ss64.com/ora/syntax-naming.html
AZ_


Hội nghị đặt tên của Oracle là hài hước nhất trong số họ .. e.g. PATIENTS would have a primary key called pa_patient_id_pk!!
nawfal

2

Bảng tên số ít. Giả sử bạn đang lập mô hình thực tế giữa ai đó và địa chỉ của họ. Ví dụ: nếu bạn đang đọc một datamodel, bạn sẽ thích 'mỗi người có thể sống ở 0,1 hoặc nhiều địa chỉ.' hoặc 'mỗi người có thể sống ở 0,1 hoặc nhiều địa chỉ.' Tôi nghĩ rằng địa chỉ số nhiều dễ dàng hơn, thay vì phải viết lại mọi người như cá nhân. Cộng với danh từ tập thể khá thường không giống với phiên bản số ít.


-4

--Example SQL

CREATE TABLE D001_Students
(
    StudentID INTEGER CONSTRAINT nnD001_STID NOT NULL,
    ChristianName NVARCHAR(255) CONSTRAINT nnD001_CHNA NOT NULL,
    Surname NVARCHAR(255) CONSTRAINT nnD001_SURN NOT NULL,
    CONSTRAINT pkD001 PRIMARY KEY(StudentID)
);

CREATE INDEX idxD001_STID on D001_Students;

CREATE TABLE D002_Classes
(
    ClassID INTEGER CONSTRAINT nnD002_CLID NOT NULL,
    StudentID INTEGER CONSTRAINT nnD002_STID NOT NULL,
    ClassName NVARCHAR(255) CONSTRAINT nnD002_CLNA NOT NULL,
    CONSTRAINT pkD001 PRIMARY KEY(ClassID, StudentID),
    CONSTRAINT fkD001_STID FOREIGN KEY(StudentID) 
        REFERENCES D001_Students(StudentID)
);

CREATE INDEX idxD002_CLID on D002_Classes;

CREATE VIEW V001_StudentClasses
(
    SELECT
        D001.ChristianName,
        D001.Surname,
        D002.ClassName
    FROM
        D001_Students D001
            INNER JOIN
        D002_Classes D002
            ON
        D001.StudentID = D002.StudentID
);

Đây là những quy ước tôi đã được dạy, nhưng bạn nên thích nghi với bất cứ điều gì bạn sử dụng vòi phát triển.

  1. Số nhiều. Nó là một tập hợp các thực thể.
  2. Đúng. Thuộc tính là một đại diện của thuộc tính số ít của một thực thể.
  3. Có, tên bảng tiền tố cho phép dễ dàng theo dõi việc đặt tên cho tất cả các chỉ mục ràng buộc và bí danh bảng.
  4. Trường hợp Pascal cho tên bảng và cột, tiền tố + TẤT CẢ mũ cho chỉ mục và ràng buộc.

6
ChristianName ... đó là một quy ước kỳ lạ.
BobbyShaftoe

3
Số sê-ri trên bàn của bạn? Có ai nghiêm túc nghĩ rằng điều này có ý nghĩa làm việc cho các nhà phát triển?
ErikE

Vì ví dụ này đã đưa nó lên ... Cá nhân tôi chống lại các từ viết tắt trong tên bảng hoặc cột, vì tôi nghĩ rằng nó làm cho nó khó đọc hơn. Vì vậy, trong trường hợp này, tôi sẽ nói StudentId thích hợp hơn StudentID. Không phải là vấn đề lớn khi từ viết tắt ở cuối, nhưng tôi đã thấy vô số ví dụ trong công việc của mình, nơi các từ viết tắt ở phía trước hoặc giữa tên, và nó khiến bạn khó phân tích hơn. Vd: StudentABCSSN vs StudentAbcSsn.
redOc / 1013
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.