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%';