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

Giới thiệu về Mô hình Dữ liệu ER

Mô hình dữ liệu mối quan hệ-thực thể , còn được gọi là ER , là một trong những mô hình dữ liệu khác nhau mà bạn có thể sử dụng để lập luận về dữ liệu của mình.

Đặc biệt, đó là mô hình dữ liệu khái niệm , vì nó không được liên kết với bất kỳ triển khai cụ thể nào. Đó là nhiệm vụ còn lại đối với mô hình dữ liệu logic.

Mô hình dữ liệu ER là tổng quát, cấp cao, đến mức nó có thể được triển khai bởi nhiều loại cơ sở dữ liệu hoàn toàn khác nhau.

Điều đó thật tuyệt vì bạn không nghĩ về chi tiết triển khai mà thay vào đó bạn chỉ nghĩ về dữ liệu của bạn và cách nó được tổ chức . Và trong khi làm như vậy, bạn buộc phải phân tích vấn đề theo những cách mà bạn chưa từng nghĩ đến trước đây.

Tôi thấy sơ đồ ER rất tốt trong việc giúp bạn phân tích một tình huống có liên quan đến dữ liệu.

Mô hình ER cung cấp cho bạn các công cụ để biểu diễn, sử dụng ký hiệu đồ họa, tất cả dữ liệu bạn cần để lập mô hình, mối quan hệ giữa các loại dữ liệu khác nhau và thông tin liên quan đến nó.

Có 2 mục tạo nên Mô hình ER:

  • các thực thể
  • mối quan hệ

Thực thể là các loại dữ liệu, như các mục hoặc con người, có các thuộc tính chung.

Mối quan hệ là mối quan hệ giữa các thực thể.

Hãy để tôi cho bạn một ví dụ, hãy nói về sách và tác giả của chúng. Chúng tôi có 2 thực thể :

  • sách
  • tác giả

Một cuốn sách cụ thể là một bản sao của thực thể sách.

Vì chúng tôi có 2 thực thể, chúng tôi có 2 mối quan hệ giữa họ. Một là mối quan hệ giữa một cuốn sách và thực thể tác giả. Một là mối quan hệ giữa một tác giả duy nhất và thực thể sách. Nếu chúng ta nghĩ về nó, hãy có:

  • một cuốn sách có một tác giả
  • một tác giả có thể viết nhiều cuốn sách khác nhau

Ký hiệu trực quan cho các thực thể

Với ví dụ đơn giản này, chúng tôi có thể bắt đầu giới thiệu ký hiệu trực quan sẽ giúp chúng tôi tạo Mô hình Dữ liệu ER cho kịch bản của chúng tôi.

Lưu ý:Có nhiều cách khác nhau để vẽ biểu đồ ER. Tôi sẽ sử dụng cái đó, theo ý kiến ​​của tôi , trực quan hơn và có ý nghĩa hơn.

Các thực thể được biểu diễn dưới dạng hình chữ nhật, với một số văn bản trong đó để xác định chúng:

Ký hiệu trực quan cho quan hệ

Mối quan hệ giữa các thực thể được biểu diễn, ở dạng cơ bản nhất của nó, bằng cách sử dụng một đường nối hai mối quan hệ và một hình thoi với một số văn bản trong đó để xác định loại mối quan hệ:

Lưu ý rằng tôi không tạo 2 quan hệ “sách có tác giả” và “tác giả đã viết sách”. Tôi đã tạo một mối quan hệ duy nhất là "tác giả" giữa Sách và Tác giả.

Cardinalities

Khi chúng ta có một mối quan hệ, bây giờ chúng ta phải chỉ ra các con số liên quan. Hiện tại, chúng tôi có nhiều câu hỏi:

  • Một cuốn sách có thể có bao nhiêu tác giả?
  • Một tác giả có thể viết nhiều sách không?
  • Tác giả có cần viết ít nhất một cuốn sách để được gọi là tác giả không?
  • Một cuốn sách có thể được viết bởi nhiều tác giả không?
  • Sách có thể tồn tại mà không có ít nhất tác giả không?

Tất cả đó đều là những câu hỏi hay để hỏi, và trong trường hợp này, tôi nghĩ câu trả lời là khá rõ ràng. Và khi câu trả lời không rõ ràng, bạn có thể suy nghĩ về vấn đề và thêm các ràng buộc của riêng mình.

Có nhiều cách khác nhau để biểu thị trực quan các số lượng trên sơ đồ. Một số thích thay đổi hình dạng của đường khi nó liên kết với một thực thể.

Tôi thích những con số hơn, giúp mọi thứ rõ ràng hơn:

Những con số trên có nghĩa là:một cuốn sách có thể được tác giả bởi 1 hoặc nhiều tác giả. n có nghĩa là bất kỳ số phần tử nào.

Và một tác giả có thể đã sáng tác từ 0 cuốn sách (có thể bây giờ đang viết một cuốn) đến vô số cuốn sách.

Mối quan hệ đầu tiên được gọi là mối quan hệ không-nhiều . Thứ hai là mối quan hệ một-nhiều .

Chúng tôi cũng có thể có:

  • mối quan hệ 1-1
  • mối quan hệ nhiều-nhiều
  • mối quan hệ không-một

Thuộc tính

Mỗi thực thể có thể có một hoặc nhiều thuộc tính.

Giả sử chúng ta sẽ sử dụng mối quan hệ trên trong một hiệu sách. Mỗi tác giả có tên, tiểu sử, URL trang web.

Mỗi cuốn sách có tên sách, nhà xuất bản, năm xuất bản, ISBN. Nhà xuất bản cũng có thể là một thực thể, nếu chúng tôi muốn. Nhưng chúng ta cũng có thể định nghĩa nó như một thuộc tính của một cuốn sách.

Đây là cách chúng tôi có thể trình bày thông tin trên:

Thuộc tính số nhận dạng

Các thực thể phải được xác định bằng một khóa duy nhất. Thực thể sách có thể được xác định duy nhất bằng thuộc tính ISBN. Mỗi cuốn sách đều có một ISBN duy nhất (coi như chúng tôi không đại diện cho một bản sao của cuốn sách mà là một “tên sách”).

Chúng tôi xác định các thuộc tính khóa chính bằng cách đặt nền tảng cho chúng:

Mặt khác, tác giả không có định danh duy nhất tại thời điểm này. Hai tác giả có thể trùng tên.

Do đó, chúng tôi phải thêm một thuộc tính khóa duy nhất. Ví dụ:một id thuộc tính:

Thuộc tính số nhận dạng có thể trải dài trên nhiều thuộc tính.

Ví dụ:ID hộ chiếu và quốc gia của tác giả nhận dạng duy nhất một người và có thể thay thế cho id thuộc tính chúng tôi đã thêm:

Chọn cái nào? Vấn đề là điều gì có ý nghĩa hơn trong ứng dụng của bạn. Nếu chúng tôi đang lập mô hình một cửa hàng sách, chúng tôi không thể mong đợi có quốc gia và id hộ chiếu của tất cả các tác giả cuốn sách. Do đó, chúng tôi sẽ sử dụng một id ngẫu nhiên chúng tôi sẽ chọn và liên kết với từng tác giả.

Thuộc tính quan hệ

Các thuộc tính không phải là duy nhất cho các thực thể. Các mối quan hệ cũng có thể có các thuộc tính.

Hãy xem xét chúng ta cần mô hình một thư viện. Ngoài sách và pháp nhân tác giả, giờ đây chúng tôi giới thiệu pháp nhân người đọc , một người mượn sách để đọc. Chúng tôi lấy tên và số thẻ id của nó khi họ mượn nó:

Nhưng chúng tôi vẫn bỏ lỡ thông tin. Chúng ta cần biết khi nào người đó mượn sách và ngày họ trả sách, vì vậy chúng ta có thể lưu trữ thông tin về lịch sử của một cuốn sách cụ thể trong thư viện của chúng ta. Thông tin này không thuộc về sách hoặc thực thể người đọc; nó thuộc về mối quan hệ:

Các thực thể yếu

Chúng ta đã nói về khóa chính ở trên và cách trợ giúp xác định duy nhất một thực thể.

Một số thực thể phụ thuộc vào các thực thể khác để tồn tại và được gọi là thực thể yếu .

Giả sử chúng ta cần lập mô hình đơn đặt hàng cho một cửa hàng trực tuyến.

Đối với mỗi đơn đặt hàng, chúng tôi sẽ lưu trữ id đơn đặt hàng, bắt đầu từ 1 và tăng dần theo thời gian, ngày giờ đặt và thông tin về khách hàng, vì vậy chúng tôi biết ai sẽ lập hóa đơn và giao hàng ở đâu.

Sau đó, chúng tôi cũng cần biết những gì họ đã đặt hàng. Chúng tôi tạo một thực thể yếu "mặt hàng đã đặt hàng", đại diện cho từng mặt hàng trong giỏ hàng tại thời điểm thanh toán.

Thực thể này sẽ lưu trữ giá mặt hàng tại thời điểm thanh toán (vì vậy khi chúng tôi thay đổi giá của các sản phẩm đang bán, nó sẽ không ảnh hưởng đến các đơn hàng đã đặt), số lượng mặt hàng đã được đặt và các tùy chọn đã chọn. Giả sử chúng tôi bán áo phông, do đó chúng tôi cần lưu trữ màu sắc và kích cỡ của áo phông đã đặt hàng.

Đây là một thực thể yếu vì một thực thể mặt hàng đã đặt hàng không thể tồn tại nếu không có một thực thể đặt hàng.

Quan hệ đệ quy

Một thực thể có thể có một quan hệ đệ quy với chính nó. Giả sử chúng ta có một thực thể người. Chúng ta có thể mô hình hóa mối quan hệ cha mẹ - con cái theo cách này:

Một người có thể có từ 0 đến n con, một người con có 2 cha mẹ (xét theo kịch bản đơn giản nhất).

Quan hệ ISA

ISA là viết tắt của IS-A và đây là một cách để lập mô hình tổng quát hóa trong mô hình ER.

Chúng tôi sử dụng nó để nhóm các thực thể tương tự dưới một cái ô chung. Ví dụ:một tác giả và một độc giả, trong trường hợp của ví dụ về sách và thư viện, có thể được khái quát hóa bằng cách sử dụng một thực thể người.

Cả hai đều có tên, vì vậy chúng tôi trích xuất tên này cho thực thể cá nhân và chỉ quản lý các đặc thù của việc trở thành tác giả hoặc độc giả trong thực thể tương ứng:

Quan hệ không phải nhị phân

Không phải mọi mối quan hệ đều là nhị phân. Hãy xem một tình huống bài học.

Một buổi học diễn ra trong một căn phòng của trường học vào lúc 10:00, với một giáo viên, đang nói chuyện với một lớp học về vật lý.

Vì vậy, một bài học được đưa ra vào một thời điểm cụ thể trong ngày, nó liên quan đến một chủ đề, một giáo viên, một lớp học và một căn phòng.

Chúng tôi có thể mô hình hóa nó theo cách này:


  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ải thiện hỗ trợ cho việc xây dựng lại số liệu thống kê song song

  2. Tham gia vòng lặp lồng nhau và Spools hiệu suất

  3. Cách so sánh hai hàng từ cùng một bảng

  4. Khôi phục cơ sở dữ liệu WordPress của bạn với WP-CLI

  5. Cách sắp xếp trong SQL