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

Cách tạo mối quan hệ 1-1 thực sự trong SQL Server

Tôi khá chắc về mặt kỹ thuật là không thể có mối quan hệ True 1 với 1 trong SQL Server, vì điều đó có nghĩa là bạn sẽ để chèn cả hai bản ghi cùng một lúc (nếu không, bạn sẽ gặp lỗi ràng buộc khi chèn), trong cả hai bảng, với cả hai bảng có mối quan hệ khóa ngoại với nhau.

Điều đó đang được nói, thiết kế cơ sở dữ liệu của bạn được mô tả với khóa ngoại là mối quan hệ 1 đến 0..1. Không có ràng buộc nào có thể yêu cầu bản ghi trong tableB. Bạn có thể có mối quan hệ giả với trình kích hoạt tạo bản ghi trong tableB.

Vì vậy, có một vài giải pháp giả

Đầu tiên, lưu trữ tất cả dữ liệu trong một bảng duy nhất. Sau đó, bạn sẽ không gặp vấn đề gì trong EF.

Hoặc Thứ hai, thực thể của bạn phải đủ thông minh để không cho phép chèn trừ khi nó có một bản ghi được liên kết.

Hoặc thứ ba, và rất có thể, bạn gặp vấn đề đang cố gắng giải quyết và bạn đang hỏi chúng tôi tại sao giải pháp của bạn không hoạt động thay vì vấn đề thực tế mà bạn đang cố gắng giải quyết (Vấn đề XY).

CẬP NHẬT

Để giải thích trong THỰC TẾ Làm thế nào để các mối quan hệ 1-1 không hoạt động, tôi sẽ sử dụng phép so sánh tương tự về thế tiến thoái lưỡng nan của Con gà hoặc quả trứng. Tôi không có ý định giải quyết tình huống khó xử này, nhưng nếu bạn có một ràng buộc rằng để thêm Trứng vào bảng Trứng, mối quan hệ của Gà phải tồn tại và gà phải tồn tại trong bảng, thì bạn không thể thêm Trứng vào bảng Trứng. Điều ngược lại cũng đúng. Bạn không thể thêm Gà vào bảng Gà nếu không có cả mối quan hệ với Trứng và Trứng tồn tại trong bảng Trứng. Vì vậy, không có bản ghi nào có thể được tạo mọi thứ, trong cơ sở dữ liệu mà không vi phạm một trong các quy tắc / ràng buộc.

Cơ sở dữ liệu danh pháp của mối quan hệ một-một là gây hiểu lầm. Tất cả các mối quan hệ mà tôi đã thấy (trước đó là trải nghiệm của tôi) sẽ được mô tả nhiều hơn là các mối quan hệ một đối (không hoặc một).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để thực hiện GROUP BY trên một cột bí danh trong MS-SQL Server?

  2. EXP () Ví dụ trong SQL Server

  3. Triển khai phân trang bằng cách sử dụng OFFSET FETCH NEXT trong SQL Server

  4. Tìm hiểu lý do tại sao không gửi được email trong SQL Server (T-SQL)

  5. Máy ảo Azure để sử dụng máy chủ SQL