Quy ước đặt tên cột và thực tiễn tốt nhất


19

Tôi muốn một số ý kiến ​​chuyên gia về thực tiễn tốt nhất khi nói đến việc đặt tên cột .

Bối cảnh là theo Wikipedia , cú pháp sau đây,

SELECT ... FROM Employees JOIN Timesheets USING (EmployeeID);

hiệu quả hơn

SELECT ... FROM Employees JOIN Timesheets ON (Employees.EmployeeID = Timesheets.EmployeeID);

Tuy nhiên, JOIN ... USINGcú pháp chỉ hoạt động của tất cả các cột khóa chính có tên duy nhất trên toàn cầu . Vì vậy, tôi tự hỏi nếu điều này được coi là Điều phải làm.

Cá nhân, tôi luôn sử dụng để tạo các bảng có cột PK idvà cột khóa ngoài othertable_id. Nhưng theo cách đó thì không thể sử dụng USINGhay NATURAL JOIN.

Bất kỳ liên kết đến phong cách thiết kế hoặc hướng dẫn thực hành tốt nhất cho thiết kế bảng cũng sẽ được đánh giá cao!


3
Wikipedia là sai. Phiên bản đầu tiên không có nghĩa là hiệu quả hơn phiên bản thứ hai. Trong cơ sở dữ liệu, cơ sở dữ liệu sẽ tạo ra các truy vấn giống hệt nhau tuyệt đối
a_horse_with_no_name

Câu trả lời:


13

Điều này đã được hỏi trước đây trên SO.

Trường hợp bạn có tên phổ biến và rất mơ hồ, thì tiền tố với tên bảng. Đó là, bất cứ điều gì bạn có thể phải bí danh trong hầu hết mọi truy vấn.

Vì vậy, đối với một bảng nhân viên tôi có

EmployeeID
EmployeeName
Comment
Salary
StartDate
EndDate
InsertedDateTime
...

Và Wikipedia thực sự nói:

Tuy nhiên, cấu trúc USING không chỉ đơn thuần là đường cú pháp, vì tập kết quả khác với tập kết quả của phiên bản với vị từ rõ ràng. Cụ thể, bất kỳ cột nào được đề cập trong danh sách SỬ DỤNG sẽ chỉ xuất hiện một lần, với tên không đủ tiêu chuẩn, thay vì một lần cho mỗi bảng trong liên kết.

Đó là một cột ít hơn. SELECT *Dù sao thì bạn cũng không bao giờ sử dụng nên vấn đề là ...


Tôi đã không nghĩ đến việc tìm kiếm SO - ngớ ngẩn với tôi. Bạn có liên kết đến bất kỳ câu hỏi SO đặc biệt tốt? Dù sao, cảm ơn, tôi sẽ gắn bó với "ID duy nhất" từ đó!
Kerrek SB

@Kerrk SB: thực ra, tôi chưa. Tôi có xu hướng phớt lờ họ vì mỗi người được trả lời hoặc đóng lại nhanh chóng :-) Xin lỗi
gbn

Tôi muốn xem những câu hỏi tương tự trên SO, nếu ai đó có thể khai thác một liên kết. Tôi đến đây vì tôi không thể tìm thấy một câu hỏi ở đó, và tôi chắc chắn rằng nó đã được hỏi rồi. Tôi ngay lập tức tìm thấy câu hỏi này.
Nicholas Shanks

Đó là trên các lập trình viên. E. Một cuộc chiến lớn tuyệt vời dành cho bạn ... lập trình
viên.stackexchange.com/questions/114728/ Kẻ

6

Cuốn sách sau đây nói về việc sử dụng ID làm một phản mẫu SQL và tôi nói với tác giả rằng đó là. http://www.amazon.com/Query-Antipotypes- Lập trình

Đây là một vấn đề cụ thể khi bạn đang thực hiện báo cáo phức tạp và cần nhiều hơn một id khi bạn phải đặt bí danh. Sử dụng ID tablename cũng giúp dễ dàng xác định FK chính xác để tham gia (vì chúng có cùng tên) và khiến các lỗi không tham gia vào điều sai ít xảy ra.

Điều đó nói rằng, nhiều cơ sở dữ liệu không hỗ trợ cú pháp SỬ DỤNG, điều này khiến cho vấn đề bạn đưa ra không phải là vấn đề đối với các cơ sở dữ liệu này. nếu cấu trúc bảng thay đổi. Vì vậy, giả sử bạn thêm một trường có tên là Sửa đổi vào cả hai bảng, bạn sẽ không muốn tham gia vào đó nhưng tham gia tự nhiên sẽ làm như vậy.


4

Tốt hơn là cung cấp rõ ràng tên bảng và tên cột như Nhân viên.EmployeeID với các biểu thức có tồn tại một phép nối

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.