Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Thiết kế cơ sở dữ liệu 101

Một bài tập mô hình hóa dữ liệu tốt cho người mới bắt đầu là tạo mô hình dữ liệu của một cửa hàng trực tuyến . Mỗi khi giao bài tập này cho học sinh, tôi rất ngạc nhiên về độ khó của chúng.

Tìm các khái niệm ...

Hãy xem nó có thể được thực hiện như thế nào. Chúng tôi biết chúng tôi phải tạo một bảng cho mọi khái niệm trong miền. Suy nghĩ về danh từ cụm danh từ bạn sẽ sử dụng để mô tả miền. Đại khái, mọi danh từ đều là một khái niệm, một thuộc tính của một khái niệm hoặc một ví dụ . Các khái niệm cơ bản trong một cửa hàng trực tuyến là gì? Ngay lập tức nghĩ đến hai từ:

  • khách hàng - những người mua đồ trong cửa hàng của chúng tôi và
  • sản phẩm - các mặt hàng mọi người mua tại cửa hàng của chúng tôi.

Mỗi khách hàng đều có một bộ dữ liệu cơ bản mô tả họ:id (bạn thường cần thuộc tính id trong bảng của mình), tên, email và mật khẩu. Tương tự, một sản phẩm có id và tên. Chúng tôi có thể thêm nhiều thuộc tính hơn cho khách hàng và sản phẩm nhưng vì lợi ích của ví dụ này, những thuộc tính này sẽ làm được. Chúng tôi thêm hai bảng vào mô hình của mình.

... Cũng như các khái niệm trừu tượng

Đây là một cửa hàng, nên rõ ràng, chúng tôi muốn biết cái gì đã được đặt hàng và bởi ai . “Đơn hàng” là một từ khóa trong hầu hết các cơ sở dữ liệu, vì vậy chúng ta không nên sử dụng nó cho tên bảng. Thay vào đó, chúng tôi sẽ sử dụng tên purchase cho bảng thứ ba trong mô hình của chúng tôi. Bảng phải được kết nối bằng cách nào đó với customer và đến sản phẩm product . Để bắt đầu, hãy chỉ vẽ một tham chiếu giữa purchasecustomer và giữa purchaseproduct .

customer-purchase tham khảo là OK. Mỗi giao dịch mua được thực hiện bởi một khách hàng; mọi khách hàng có thể thực hiện nhiều lần mua hàng. Tài liệu tham khảo này ở đây để ở lại.

Tuy nhiên, có điều gì đó không ổn với purchase-product thẩm quyền giải quyết. Một số sản phẩm có thể được mua trong một lần mua; một số lần mua có thể bao gồm cùng một sản phẩm. Nhưng tài liệu tham khảo của chúng tôi chỉ cho phép mua một sản phẩm trong một lần mua. Hãy xóa tham chiếu và nghĩ về một cách khác để lập mô hình.

Một trường văn bản lớn cho tất cả các sản phẩm đã mua?

Làm thế nào về việc chúng tôi thêm một trường văn bản lớn có thể lưu trữ tên hoặc id của các sản phẩm đã mua? Bây giờ chúng ta có thể mua nhiều sản phẩm trong một lần mua hàng. Tuy nhiên, có một số vấn đề ở đây:

  • Đầu tiên, rất khó để kiểm tra xem sản phẩm trong purchased_items trường thực sự có trong cơ sở dữ liệu.
  • Thứ hai, nếu bạn muốn thay đổi tên của sản phẩm (vì bạn viết sai chính tả) thì bạn phải cập nhật tất cả purchased_items các trường hợp trong purchase bảng.
  • Cuối cùng, rất khó để phân tích dữ liệu trong cơ sở dữ liệu. Ví dụ:nếu bạn muốn tìm sản phẩm nào được mua thường xuyên nhất, bạn cần sử dụng thao tác chuỗi văn bản. Và điều đó không bao giờ hiệu quả.

Một số Cột Sản phẩm trong Bảng Mua hàng?

Một số tùy chọn khác là gì? Chúng tôi muốn một giao dịch mua được kết nối với một số sản phẩm, vì vậy có thể chúng tôi nên thêm một số purchase_item cột trong bảng mua hàng? Chà, điều đó thật mệt mỏi (tôi chỉ thêm 5 cột và cảm thấy mệt mỏi) và tạo ra một nhân tạo và ngu ngốc giới hạn số lượng sản phẩm được mua.

Sử dụng Bảng trung gian!

Giải pháp ngớ ngẩn gợi ý cho giải pháp đúng. Chúng tôi muốn có một không giới hạn số lượng sản phẩm được kết nối với giao dịch mua. Cách duy nhất là có một bảng kết nối trung gian . Hãy gọi nó là purchase_item . purchase_item bảng được kết nối với purchaseproduct . Giờ đây, một giao dịch mua có thể bao gồm nhiều sản phẩm mà chúng tôi muốn. Như một phần thưởng, chúng tôi có thể thêm dữ liệu bổ sung trong bảng:số lần đã mua, tổng giá cho mặt hàng này, v.v.


Kết luận:

  • Các bảng trong mô hình không chỉ có thể đại diện cho các đối tượng vật lý như khách hàng hoặc sản phẩm. Các bảng có thể thể hiện nhiều khái niệm trừu tượng hơn như một giao dịch mua. Các ví dụ khác có thể là đặt phòng trong hệ thống đặt phòng khách sạn, book_loan trong mô hình thư viện, đặt lịch hẹn trong hệ thống dành cho bác sĩ y tế, v.v.
  • Khi bạn lập mô hình một giao dịch (tức là mua hoặc bán nhiều thứ), bạn thường cần ba bảng :một cho giao dịch (mua hoặc đặt phòng trong hệ thống đặt phòng khách sạn), một cho những thứ đã mua / bán trong một giao dịch (sản phẩm, phòng khách sạn) và một cho các mặt hàng giao dịch (buy_item, booking_item). Bạn có thể thêm thông tin bổ sung vào bảng trung gian nếu cần.

Tạo mô hình cơ sở dữ liệu cửa hàng của riêng bạn với Vertabelo!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các nguyên tắc cơ bản về biểu thức bảng, Phần 8 - CTE, tiếp tục xem xét tối ưu hóa

  2. Mô hình dữ liệu phân phối hàng tạp hóa

  3. Cách tạo bản sao ảnh chụp nhanh

  4. SQL, thêm dữ liệu vào bảng

  5. Tham số Sniffing Primer