Hướng dẫn cho người mới bắt đầu thiết kế cơ sở dữ liệu SQL [đã đóng]


127

Bạn có biết một nguồn tốt để tìm hiểu cách thiết kế các giải pháp SQL không?

Ngoài cú pháp ngôn ngữ cơ bản, tôi đang tìm kiếm thứ gì đó giúp tôi hiểu:

  1. Những bảng nào để xây dựng và làm thế nào để liên kết chúng
  2. Cách thiết kế cho các quy mô khác nhau (APP khách hàng nhỏ đến một trang web phân tán lớn)
  3. Cách viết các truy vấn SQL hiệu quả / hiệu quả / thanh lịch

Câu trả lời:


60

Tôi đã bắt đầu với cuốn sách này: Thiết kế cơ sở dữ liệu quan hệ được giải thích rõ ràng (Sê-ri Morgan Kaufmann trong Hệ thống quản lý dữ liệu) (Bìa mềm) của Jan L. Harrington và thấy nó rất rõ ràng và hữu ích

và khi bạn tăng tốc độ thì điều này cũng tốt Hệ thống cơ sở dữ liệu: Cách tiếp cận thực tế để thiết kế, triển khai và quản lý (sê-ri khoa học máy tính quốc tế) (Bìa mềm)

Tôi nghĩ rằng SQL và thiết kế cơ sở dữ liệu là các kỹ năng khác nhau (nhưng bổ sung).


1
Thiết kế cơ sở dữ liệu bắt đầu: Từ Novice đến Professional - Clare Churcher?
nhiệt tình

40

Tôi bắt đầu với bài viết này

http://en.tekstenuitleg.net/articles/software/database-design-tutorial/intro.html

Nó khá súc tích so với việc đọc toàn bộ một cuốn sách và nó giải thích rất cơ bản về thiết kế cơ sở dữ liệu (chuẩn hóa, các loại mối quan hệ) rất tốt.


Yêu hướng dẫn này, Cảm ơn.
MsO

Liên kết trong câu trả lời này không còn hoạt động.
Phần mềm Grizzly Peak

1
Có vẻ như liên kết đang hoạt động trở lại.
user8576017

1
Liên kết không còn hoạt động
jat255


28

Kinh nghiệm được tính rất nhiều, nhưng về mặt thiết kế bảng, bạn có thể học được rất nhiều từ cách các ORM như Hibernate và Grails hoạt động để xem tại sao họ làm việc đó. Ngoài ra:

  1. Giữ các loại dữ liệu khác nhau - không lưu trữ địa chỉ trong bảng đơn hàng của bạn, ví dụ như liên kết đến một địa chỉ trong bảng địa chỉ riêng biệt.

  2. Cá nhân tôi thích có một khóa thay thế số nguyên hoặc dài trên mỗi bảng (chứa dữ liệu, không phải các liên kết các bảng khác nhau với nhau, các mối quan hệ e, g., M: n) là khóa chính.

  3. Tôi cũng thích có một cột dấu thời gian được tạo và sửa đổi.

  4. Đảm bảo rằng mỗi cột bạn thực hiện "trong đó cột = val" trong bất kỳ truy vấn nào đều có chỉ mục. Có thể không phải là chỉ mục hoàn hảo nhất trên thế giới cho kiểu dữ liệu, nhưng ít nhất là một chỉ mục.

  5. Thiết lập khóa ngoại của bạn. Đồng thời thiết lập các quy tắc BẬT XÓA và BẬT MODIFY khi có liên quan, theo tầng hoặc đặt null, tùy thuộc vào cấu trúc đối tượng của bạn (vì vậy bạn chỉ cần xóa một lần ở 'đầu' của cây đối tượng và tất cả các đối tượng phụ của đối tượng đó nhận được tự động xóa).

  6. Nếu bạn muốn mô đun hóa mã của mình, bạn có thể muốn mô đun hóa lược đồ DB của mình - ví dụ: đây là khu vực "khách hàng", đây là khu vực "đơn hàng" và đây là khu vực "sản phẩm" và sử dụng bảng tham gia / liên kết giữa chúng, ngay cả khi chúng là quan hệ 1: n và có thể trùng lặp thông tin quan trọng (nghĩa là sao chép tên sản phẩm, mã, giá vào bảng order_details của bạn). Đọc lên về bình thường hóa.

  7. Một số người khác sẽ đề xuất chính xác điều ngược lại cho một số hoặc tất cả những điều trên: p - không bao giờ là một cách thực sự để làm một số điều eh!


1
ORM, tất cả các điểm của bạn là chống cơ sở dữ liệu .
PerformanceDBA

1
Thêm chỉ mục không phải lúc nào cũng có nghĩa là tốc độ cao hơn. Đôi khi họ thực sự làm cho các truy vấn chậm hơn. Nó thực sự phụ thuộc vào truy vấn và bạn nên kiểm tra chúng explain analyzenếu chỉ mục là một lợi ích.
ArashM



2

Đây là những câu hỏi, theo ý kiến ​​của tôi, đòi hỏi kiến ​​thức khác nhau từ các lĩnh vực khác nhau.

  1. Bạn chỉ không thể biết trước các bảng "xây dựng" nào, bạn phải biết vấn đề bạn phải giải quyết và thiết kế lược đồ cho phù hợp;
  2. Đây là sự kết hợp của quyết định thiết kế cơ sở dữ liệu và các khả năng tùy chỉnh của nhà cung cấp cơ sở dữ liệu của bạn (ví dụ: bạn nên kiểm tra tài liệu về (r) dbms của mình và cuối cùng tìm hiểu một số "mẹo & thủ thuật" để mở rộng), cũng như cấu hình của dbms là rất quan trọng đối với nhân rộng (nhân rộng, phân vùng dữ liệu và như vậy);
  3. một lần nữa, hầu hết mọi rdbms đều đi kèm với một "phương ngữ" cụ thể của ngôn ngữ SQL, vì vậy nếu bạn muốn truy vấn hiệu quả, bạn phải học phương ngữ cụ thể đó --btw. rất có thể viết truy vấn thanh lịch mà cũng hiệu quả là một vấn đề lớn: sự thanh lịch và hiệu quả là những mục tiêu thường xuyên xung đột--

Điều đó nói rằng, có thể bạn muốn đọc một số cuốn sách, cá nhân tôi đã sử dụng cuốn sách này trong khóa học đại học cơ sở dữ liệu của tôi (và tìm thấy một cuốn sách hay, nhưng tôi không đọc những cuốn sách khác trong lĩnh vực này, vì vậy lời khuyên của tôi là hãy kiểm tra một số sách hay trong thiết kế cơ sở dữ liệu).


2

Đã được một thời gian kể từ khi tôi đọc nó (vì vậy, tôi không chắc nó có liên quan đến mức nào), nhưng tôi nhớ rằng cuốn sách SQL for Smarties của Joe Celko cung cấp nhiều thông tin về cách viết các truy vấn thanh lịch, hiệu quả và hiệu quả .


phiên bản thứ tư 2010 có thể được cập nhật
rleir

1
Cuốn sách Celko là một nghiên cứu về lỗi, và đưa ra khái niệm về việc thực thi mã, những gì nên được thực hiện trong cơ sở dữ liệu.
PerformanceDBA
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.