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

Thiết kế mối quan hệ 1:1 và 1:m trong SQL Server

Bất kỳ mối quan hệ nào đều yêu cầu bảng "cha" (một bên) phải có Khóa chính (hoặc duy nhất) (PK), xác định duy nhất mỗi hàng và bảng "con" (bên kia) có một hoặc các cột Khóa ngoại , phải được điền các giá trị giống với một số [các] giá trị hiện có của Khóa chính trong bảng chính. Nếu bạn muốn mối quan hệ một đến nhiều (1-M) thì Khóa ngoại phải là một thuộc tính bình thường (cột hoặc các cột) trong bảng con có thể lặp lại (có thể có nhiều hàng có cùng giá trị)

Nếu bạn muốn có mối quan hệ 1-1 (1-1) thì bản thân Khóa ngoại phải là Khóa chính hoặc chỉ mục duy nhất trong bảng con để đảm bảo rằng có thể có nhiều nhất một hàng trong bảng con với giá trị đó.

Mối quan hệ 1-1 phân chia hiệu quả các thuộc tính (cột) trong bảng thành hai bảng. Đây được gọi là phân đoạn dọc. Điều này thường được thực hiện đối với phân loại phụ các thực thể bảng, hoặc, vì một lý do khác, nếu các mẫu sử dụng trên các cột trong bảng chỉ ra rằng một số cột cần được truy cập thường xuyên hơn đáng kể so với các cột còn lại. (Giả sử một hoặc hai cột sẽ được truy cập 1000 lần mỗi giây và 40 cột còn lại sẽ chỉ được truy cập mỗi tháng một lần). Thực tế, việc phân vùng bảng theo cách này sẽ tối ưu hóa mẫu lưu trữ cho hai truy vấn khác nhau đó.

Phân loại phụ . Ở trên thực sự tạo ra mối quan hệ từ 1 đến 0 hoặc một, được sử dụng cho những gì được gọi là mối quan hệ lớp con hoặc kiểu con. Điều này xảy ra khi bạn có hai thực thể khác nhau chia sẻ một số lượng lớn các thuộc tính, nhưng một trong các thực thể có các thuộc tính bổ sung mà đối tượng kia không cần. Một ví dụ điển hình có thể là Nhân viên Người làm công ăn lương . Nhân viên bảng sẽ có tất cả các thuộc tính mà tất cả nhân viên chia sẻ và Người được trả lương bảng sẽ tồn tại trong mối quan hệ (1-0 / 1) với Nhân viên, với các thuộc tính bổ sung ( Lương , Địa điểm hàng năm , v.v.) mà chỉ Người làm công ăn lương mới cần.

Nếu bạn thực sự muốn có mối quan hệ 1-1, thì bạn phải thêm một cơ chế khác để đảm bảo rằng bảng con sẽ luôn có một bản ghi cho mỗi bản ghi / hàng trong bảng mẹ. Nói chung, cách duy nhất để làm điều này là thực thi điều này trong mã được sử dụng để chèn dữ liệu (trong trình kích hoạt, thủ tục được lưu trữ hoặc mã bên ngoài cơ sở dữ liệu). Điều này là do nếu bạn đã thêm các ràng buộc toàn vẹn tham chiếu trên hai bảng yêu cầu các hàng luôn ở trong cả hai, thì sẽ không thể thêm một hàng vào một trong hai mà không vi phạm một trong các ràng buộc và bạn không thể thêm một hàng vào cả hai. các bảng cùng một lúc.



  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ách tạo tất cả các tập lệnh ràng buộc

  2. Lấy tên của một cột từ ID của nó trong SQL Server:COL_NAME ()

  3. Không thể lấy kết quả của thủ tục được lưu trữ trong biến?

  4. SQL Server - Hợp nhất các bảng lớn mà không khóa dữ liệu

  5. Laravel cho SQL Server (sqlsrv). [PDOException] không thể tìm thấy trình điều khiển