Câu hỏi Bảng Đặt tên tiến thoái lưỡng nan: Tên số ít so với số nhiều [đóng]


Academia có nó rằng tên bảng nên là số ít của thực thể mà họ lưu trữ các thuộc tính của.

Tôi không thích bất kỳ T-SQL nào yêu cầu dấu ngoặc vuông xung quanh tên, nhưng tôi đã đổi tên Users bảng đến số ít, mãi mãi kết án những người sử dụng bảng để đôi khi phải sử dụng dấu ngoặc đơn.

Cảm giác ruột của tôi là nó là chính xác hơn để ở lại với số ít, nhưng cảm giác ruột của tôi cũng là dấu ngoặc cho thấy undesirables như tên cột với không gian trong họ vv

Tôi có nên ở lại hay tôi nên đi?


1175


gốc


Dup của trước đó Các bảng cơ sở dữ liệu đặt tên, số nhiều hoặc số ít, nhưng điều này có nhiều sự chú ý hơn. - outis
Tiếng Anh không phải là tiếng mẹ đẻ của tôi, có thể ai đó vui lòng cho tôi tên ví dụ Singular và Plural? - GusDeCooL
codeproject.com/Articles/309304/… - Mr Spark
Tôi ngạc nhiên khi nhiều người không nói: nó được xác định bởi những gì một hàng đại diện. Trong một cơ sở dữ liệu duy nhất, tôi có thể có một bảng những hàng đại diện cho một tiện ích duy nhất và một mối quan hệ một-nhiều với bảng đó có nghĩa là các hàng đại diện cho nhiều tiện ích. Không làm điều này làm mất tính biểu cảm. - andygavin
@andygavin tốt, tôi làm việc trong một hệ thống nơi số ít và số nhiều được trộn lẫn (có lẽ như bạn đề nghị, tôi có thể kiểm tra nó lên, nhưng tôi nghi ngờ nó chỉ là quá nhiều đầu bếp), phải mất một thời gian trước khi bạn đã nhận nó đúng (intellisense là luôn luôn quá chậm đối với tôi ...) - Erk


Các câu trả lời:


Những người khác đã đưa ra câu trả lời khá tốt theo "tiêu chuẩn", nhưng tôi chỉ muốn thêm điều này ... Có thể "Người dùng" (hoặc "Người dùng") không thực sự mô tả đầy đủ dữ liệu được lưu trữ trong bảng ? Không phải là bạn nên quá điên rồ với tên bảng và tính đặc hiệu, nhưng có lẽ một cái gì đó như "Widget_Users" (nơi "Widget" là tên của ứng dụng hoặc trang web của bạn) sẽ thích hợp hơn.


206



Tôi đồng ý. OrgUsers, AppUsers, bất cứ điều gì để tránh sử dụng một từ khóa. - MikeW
-1. Người dùng bảng (và quốc gia, ngôn ngữ) có thể được sử dụng trong vài ứng dụng cùng một lúc. - OZ_
Sẽ không liên kết tên lược đồ sẽ loại bỏ tất cả sự nhầm lẫn? AppName1.Users, AppName2.Users? - Zo Has
Đó là một khả năng, nhưng có thể có nhiều lý do tại sao một người nào đó không muốn sử dụng schemata theo cách đó. Ngoài ra, ngay cả với một lược đồ bạn vẫn sẽ gặp vấn đề với chúng là từ khóa. - Tom H
Tôi không đồng ý với tiền tố bảng - đó có lẽ nên là một lược đồ? - nhưng tôi đồng ý với một "tên mô tả hơn". Ngay cả một cái gì đó đơn giản như "AppUser" sẽ là đủ, mà không cần nhập cuộc tranh luận toàn bộ không gian tên.


Tôi đã có cùng một câu hỏi, và sau khi đọc tất cả các câu trả lời ở đây tôi chắc chắn ở lại với SINGULAR, lý do:

Lý do 1 (Khái niệm). Bạn có thể nghĩ về túi đựng táo như "AppleBag", nó không quan trọng nếu chứa 0, 1 hoặc một triệu quả táo, nó luôn luôn là cùng một túi. Bảng chỉ là, các thùng chứa, tên bảng phải mô tả những gì nó chứa, không bao nhiêu dữ liệu nó chứa. Ngoài ra, khái niệm số nhiều là nhiều hơn về một ngôn ngữ nói (thực sự để xác định xem có một hay nhiều).

Lý do 2. (Tiện). nó dễ dàng hơn với những cái tên ít hơn, so với những cái số nhiều. Đối tượng có thể có số nhiều không đều hoặc không số nhiều, nhưng sẽ luôn có số nhiều (ít ngoại lệ như Tin tức).

  • khách hàng
  • Gọi món
  • Người dùng
  • Trạng thái
  • Tin tức

Lý do 3. (Thẩm mỹ và trật tự). Đặc biệt trong các kịch bản chi tiết chính, điều này đọc tốt hơn, sắp xếp tốt hơn theo tên và có thứ tự logic hơn (Master trước tiên, Chi tiết thứ hai):

  • 1.Order
  • 2.OrderDetail

So với:

  • 1.OrderDetails
  • 2 đơn đặt hàng

Lý do 4 (Sự đơn giản). Đặt tất cả lại với nhau, tên bảng, khóa chính, mối quan hệ, lớp thực thể ... tốt hơn là chỉ biết một tên (số ít) thay vì hai (số ít, số nhiều, trường số ít, số nhiều chi tiết số nhiều .. .)

  • Customer
  • Customer.CustomerID
  • CustomerAddress
  • public Class Customer {...}
  • SELECT FROM Customer WHERE CustomerID = 100

Một khi bạn biết bạn đang đối phó với "Khách hàng", bạn có thể chắc chắn bạn sẽ sử dụng cùng một từ cho tất cả các nhu cầu tương tác cơ sở dữ liệu của bạn.

Lý do 5. (Toàn cầu hoá). Thế giới đang trở nên nhỏ hơn, bạn có thể có một nhóm các quốc gia khác nhau, không phải ai cũng có tiếng Anh như một ngôn ngữ bản địa. Nó sẽ dễ dàng hơn cho một lập trình viên tiếng Anh không phải là người bản địa để nghĩ về "Repository" hơn là "Repositories", hoặc "Statuses" thay vì "Status". Có tên ít có thể dẫn đến ít lỗi hơn do lỗi chính tả, tiết kiệm thời gian bằng cách không phải nghĩ "nó là Trẻ em hay Trẻ em?", Do đó cải thiện năng suất.

Lý do 6. (Tại sao không?). Nó thậm chí có thể giúp bạn tiết kiệm thời gian viết, tiết kiệm không gian đĩa, và thậm chí làm cho bàn phím máy tính của bạn kéo dài hơn!

  • SELECT Customer.CustomerName FROM Customer WHERE Customer.CustomerID = 100
  • SELECT Customers.CustomerName FROM Customers WHERE Customers.CustomerID = 100

Bạn đã lưu 3 chữ cái, 3 byte, 3 lần truy cập bàn phím bổ sung :)

Và cuối cùng, bạn có thể đặt tên cho những người đó với tên riêng như:

  • Người dùng> Người dùng đăng nhập, Người dùng ứng dụng, Người dùng hệ thống, Người dùng CMS, ...

Hoặc sử dụng dấu ngoặc vuông khét tiếng [Người dùng]


1389



Tôi sẽ đặt cược nếu bạn đặt một nhãn trên một ngăn kéo vớ bạn sẽ gọi nó là "Socks". - Chris Ward
Definetelly. Thật khó để có được một tiêu chuẩn phù hợp với tất cả và cho mọi người, điều quan trọng là nó có tác dụng với bạn. Điều này làm việc cho tôi, và ở đây tôi đã giải thích lý do tại sao, nhưng một lần nữa, đó là dành cho tôi, và tôi thấy nó rất thuận tiện. - Nestor
Câu hỏi lớn hơn Chris, là lý do tại sao bạn sẽ làm theo quy ước đặt tên cơ sở dữ liệu khi đặt tên một ngăn kéo vớ? - Kyle Clegg
Câu trả lời này cần thêm lời khen ngợi. Nó thảo luận về một loạt các lý do thực tế mà tôi áp dụng cho lý do tại sao tôi thích tên số ít. Các cuộc thảo luận thay thế về ngôn ngữ thích hợp trong tham chiếu đến các bộ chỉ là triết học và che khuất điểm thực. Singular chỉ hoạt động tốt hơn. - Jason
Tôi có ngăn kéo "Sock" ở nhà, không phải ngăn kéo "Vớ". Nếu đó là một cơ sở dữ liệu, tôi sẽ gọi nó là bảng "Sock". - jlembke


Nếu bạn sử dụng các công cụ Ánh xạ quan hệ đối tượng hoặc trong tương lai, tôi đề xuất Số ít.

Một số công cụ như LLBLGen có thể tự động sửa tên số nhiều như Người dùng thành Người dùng mà không thay đổi tên bảng. Vì sao vấn đề này? Bởi vì khi nó được ánh xạ, bạn muốn nó trông giống như User.Name thay vì Users.Name hoặc tệ hơn từ một số bảng cơ sở dữ liệu cũ của tôi có tên là tblUsers.strName mà chỉ là khó hiểu trong mã.

Quy tắc mới của tôi là đánh giá nó trông như thế nào khi nó được chuyển đổi thành một vật thể.

một bảng tôi đã tìm thấy không phù hợp với việc đặt tên mới mà tôi sử dụng là UsersInRoles. Nhưng sẽ luôn có vài ngoại lệ đó và ngay cả trong trường hợp này, nó có vẻ tốt như UsersInRoles.Username.


242



Tôi đã bình chọn và tôi sẽ cho bạn biết lý do vì tôi không đồng ý. ORM bởi nó rất tự nhiên là về bản đồ. Mọi công cụ ORM mà tôi từng sử dụng đều hỗ trợ chỉ rõ tên bảng được sử dụng cho một thực thể khi nó khác với tên của thực thể. Điều này quan trọng vì toàn bộ lý do chúng tôi ánh xạ tới cơ sở dữ liệu quan hệ là để chúng tôi có thể dễ dàng tạo các truy vấn và báo cáo đặc biệt với các hình dạng khác với mô hình đối tượng của chúng tôi. Nếu không, chúng tôi sẽ chỉ sử dụng cơ sở dữ liệu đối tượng / tài liệu ngay bây giờ. - joshperry
ORM không được quy định tên của các đối tượng mà chúng ánh xạ tới. Điểm ORM là một sự trừu tượng của đối tượng, cho phép sự linh hoạt này. - barrypicker
Điều này có chủ yếu trong các công cụ hay chỉ các công cụ bạn đã sử dụng? - Bruce Alderson
Trong thế giới của tôi, tôi cố gắng sử dụng tên phù hợp trên toàn bộ dự án để tránh lãng phí thời gian tự hỏi nếu trường hợp này có một s vào cuối hay không. Thực tế là một ORM có thể đổi tên và độc lập không có nghĩa là làm như vậy là giúp các nhà phát triển đồng nghiệp của bạn. - John Nicholas
Một số ORM (giống như nhiều công cụ lập trình) có hành vi mặc định tạo ra các triển khai không có cấu hình ... với điểm bán của PRODUCTIVITY. Vì vậy, việc tạo một lớp Employee, không có ánh xạ rõ ràng, sẽ tạo ra một bảng Employee theo mặc định - user919426


Tôi thích sử dụng không được chú ý danh từ, trong tiếng Anh sẽ là số ít.

Việc làm giảm số lượng tên bảng gây ra các vấn đề về chính tả (như nhiều câu trả lời khác hiển thị), nhưng chọn làm như vậy vì các bảng thường chứa nhiều hàng cũng có đầy đủ các lỗ hổng. Điều này rõ ràng hơn nếu chúng ta xem xét một ngôn ngữ làm tăng danh từ dựa trên trường hợp (như hầu hết):

Vì chúng ta thường làm một cái gì đó với các hàng, tại sao không đặt tên trong trường hợp tố cáo? Nếu chúng ta có một bảng mà chúng ta viết cho nhiều hơn chúng ta đọc, tại sao không đặt tên trong dative? Đó là một cái bàn của một cái gì đó, tại sao không sử dụng các genitive? Chúng tôi sẽ không làm điều này, bởi vì bảng được định nghĩa là một container trừu tượng tồn tại bất kể trạng thái hoặc cách sử dụng của nó. Phát âm danh từ mà không có lý do ngữ nghĩa chính xác và tuyệt đối là bập bẹ.

Sử dụng danh từ không được phát âm là đơn giản, hợp lý, thông thường và độc lập về ngôn ngữ.


174



Có lẽ lý lẽ hợp lý nhất về chủ đề này mà tôi từng thấy, và làm tôi vui vì tôi đã dành thời gian đó cho tiếng Latin. +1 chắc chắn.
Vâng, tôi rõ ràng cần phải tăng cường vốn từ vựng của mình. - TJ Biddle
+1 Xem, đây là những loại câu trả lời mà Internet cần nhiều hơn. Bằng chứng hoàn hảo sử dụng từ vựng phong phú để thực hiện logic hoàn hảo. - OCDev
Tôi sẽ lưu ý đến lần sau tôi lập trình bằng tiếng Latin. Trong khi đó, người dùng sẽ đi vào bảng người dùng và khách hàng vào bảng khách hàng. - Caltor
Thuyết phục - uninflected nó được. Thú vị khi thấy rằng sau tất cả thời gian này, các lựa chọn phổ biến của "số ít" và "số nhiều" là cả hai sai rồi! - Stuart


Quy ước nào yêu cầu các bảng có tên số ít? Tôi luôn nghĩ đó là tên số nhiều.

Người dùng được thêm vào bảng Người dùng.

Trang web này đồng ý:
http://vyaskn.tripod.com/object_naming.htm#Tables

Trang web này không đồng ý (nhưng tôi không đồng ý với nó):
http://justinsomnia.org/writings/naming_conventions.html


Như những người khác đã đề cập: đây chỉ là hướng dẫn. Chọn một quy ước phù hợp với bạn và công ty / dự án của bạn và gắn bó với nó. Chuyển đổi giữa các từ số ít và số nhiều hoặc đôi khi viết tắt và đôi khi không có nhiều tình tiết tăng nặng.


115



Khi áp dụng lý thuyết tập hợp cho các bảng, bất kỳ cá thể nào trong tập hợp là đại diện của tập hợp, do đó Apple là một tập hợp của Apple, nó là bất khả tri về số lượng táo trong tập hợp - đó là một Apple với nhiều phiên bản. Một 'túi' táo không trở thành 'túi' khi nó chứa nhiều táo. - ProfK
Nếu bạn có một túi với 5 quả táo bên trong thì sao? Bạn gọi nó là một túi táo? hoặc một túi táo? - Christopher Mahan
Tôi nghĩ lý thuyết sẽ là tập hợp được đặt tên là Táo. Một quả táo nhỏ vẫn là "một bộ táo" - mặc dù, một bộ với một ví dụ duy nhất. Nhiều quả táo cũng là một "bộ táo". - Mark Brackett
@Christopher, nếu raison d'être của túi là để giữ táo và chỉ táo, sau đó nó là một "túi táo", bất kể nó có chứa 1 quả táo, 100 quả táo hoặc không có táo. - Ian Mackinnon
@ Ian: Đó là bởi vì một bảng là chung chung, và có thể được so sánh với một container vận chuyển (có thể chứa gần như bất cứ điều gì, từ thùng táo để thùng của xe máy Harley Davidson). Bạn nói: một container hàng hóa cam, không phải là một container hàng hóa màu da cam. Bạn nói: một container hàng hóa của các bộ phận xe hơi, không phải là một bộ phận xe hơi chứa hàng hóa. Nếu bạn đã tạo cấu trúc dữ liệu tùy chỉnh có nghĩa là chỉ giữ một loại dữ liệu cụ thể, chẳng hạn như tên của quả táo và bạn đặt tên là "kungabogo", thì bạn có thể có một quả táo kungaboko. Tôi biết suy nghĩ của bạn, nhưng hãy suy nghĩ trước tiên của một quả bóng, và hiểu sự khác biệt về ý nghĩa. - Christopher Mahan


Làm thế nào về điều này như là một ví dụ đơn giản:

SELECT Customer.Name, Customer.Address FROM Customer WHERE Customer.Name > "def"

so với

SELECT Customers.Name, Customers.Address FROM Customers WHERE Customers.Name > "def"

SQL trong sau này là lạ âm hơn so với trước đây.

Tôi bầu cho số ít.


55



Trong ví dụ đó, có, nhưng trong thực tế sql nó sẽ không bao giờ được viết theo cách đó. Bạn sẽ có một bí danh bảng vì vậy nó sẽ giống như SELECT C.Name, C.Address FROM Customers WHERE Customers.Name > 'def' - Michael Haren
1, (một năm sau) Bạn trích dẫn một ví dụ TERRIFIC về cách số ít có ý nghĩa. Điều này phần nào là một cuộc tranh luận tôn giáo. Tôi đã trở thành một số ít năm trước bởi một kiến ​​trúc sư dữ liệu nhiều năm cấp cao của tôi và nó cảm thấy phù hợp với tôi (sau khi đòi hỏi nhiều thuyết phục cho tôi để chuyển đổi). - Chris Adragna
Tôi nghĩ rằng sql âm thanh tốt hơn số nhiều. Bạn sẽ không có tên bảng cho mỗi cột, tại sao bạn thích gõ rất nhiều. CHỌN Tên, Địa chỉ TỪ KHI ĐẶT HÀNG Ở ĐÂU Tên> "def" Bạn đang chọn từ nhóm khách hàng có tên lớn hơn thì def. - Jamiegs
Làm thế nào về việc sử dụng một bí danh / AS để có được xung quanh một vấn đề? CHỌN Customer.Name, Customer.Address FROM Khách hàng AS Khách hàng WHERE Customer.Name> "def" - James Hughes
Âm thanh thứ hai nghe có vẻ tốt hơn, một số âm thanh như một người không thể nói được tiếng Anh. - HLGEM


Tôi tin tưởng rằng trong một Sơ đồ Quan hệ Thực thể, thực thể nên được phản ánh với một tên ít, tương tự như một tên lớp là số ít. Khi đã khởi tạo, tên này phản ánh cá thể của nó. Vì vậy, với cơ sở dữ liệu, thực thể khi được tạo thành một bảng (một tập hợp các thực thể hoặc các bản ghi) là số nhiều. Thực thể, Người dùng được đưa vào bảng Người dùng. Tôi sẽ đồng ý với những người khác đề xuất có thể tên Người dùng có thể được cải thiện thành Nhân viên hoặc điều gì đó phù hợp hơn với kịch bản của bạn.

Điều này sau đó có ý nghĩa hơn trong một câu lệnh SQL bởi vì bạn đang chọn từ một nhóm các bản ghi và nếu tên bảng là số ít, nó không đọc tốt.


53



Tôi đặc biệt thích bình luận câu lệnh SQL. Sử dụng số ít ở đây không cảm thấy trực quan với người đọc. - hochl
Điểm tuyệt vời về ERD. Tôi nghi ngờ đây là lý do tại sao, với một người nhìn thế giới qua đôi mắt của DBA, việc đặt tên số ít có ý nghĩa. Tôi nghi ngờ họ không nhận được, như bạn chỉ ra, sự khác biệt giữa một thực thể và một bộ sưu tập của họ. - William T. Mallard
Một bảng không phải là một tập hợp các bản ghi; một bảng là một định nghĩa về một bản ghi như thế nào. Đó là ngắt kết nối tất cả các số ít / số ít dân gian dường như có. - rich remer


Tôi gắn bó với số ít cho tên bảng và bất kỳ thực thể lập trình nào.

Nguyên nhân? Thực tế là có nhiều số nhiều bất thường trong tiếng Anh như chuột ⇒ và cừu ⇒ cừu. Sau đó, nếu tôi cần bộ sưu tậptôi chỉ sử dụng những con chuột hoặc là những con cừuvà tiếp tục.

Nó thực sự giúp đa số nổi bật, và tôi có thể dễ dàng và lập trình xác định những gì bộ sưu tập của những thứ sẽ như thế nào.

Vì vậy, quy tắc của tôi là: mọi thứ đều là số ít, mọi bộ sưu tập của mọi thứ đều độc đáo với S nối thêm. Giúp với ORM.


35



những gì về một từ kết thúc bằng 's'? Nếu bạn có một bảng gọi là 'Tin tức' (giống như một ví dụ), bạn sẽ gọi bộ sưu tập tin tức là gì? Tin tức? Hay bạn sẽ gọi bảng 'Mới'? - Anthony
Tôi sẽ gọi bảng NewsItem và một bộ sưu tập NewsItems. - Ash Machine
Điều gì sẽ xảy ra nếu bạn phải kiểm tra chính tả tất cả các mã, nếu không nó sẽ không biên dịch;)? - Hamish Grubijan
ORM không được quy định tên của các đối tượng mà chúng ánh xạ tới. Điểm ORM là một sự trừu tượng của đối tượng, cho phép sự linh hoạt này. - barrypicker
@HamishGrubijan sau đó ngừng sử dụng Word để viết mã của bạn! ;) - Valentino Vranken