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

Tham chiếu khóa nước ngoài Nhiều bảng

Bạn có thể muốn xem xét mô hình dữ liệu Kiểu / Kiểu con. Điều này rất giống với các lớp / lớp con trong lập trình hướng đối tượng, nhưng khó thực hiện hơn nhiều và không có RDBMS (mà tôi biết) nguyên bản hỗ trợ chúng. Ý tưởng chung là:

  • Bạn xác định một Loại (Tòa nhà), tạo bảng cho nó, cấp cho nó một khóa chính
  • Bạn xác định hai hoặc nhiều loại phụ (tại đây, Bệnh viện, Phòng khám, Trường học, Đại học), tạo bảng cho từng loại, tạo khóa chính… nhưng khóa chính cũng là khóa ngoại tham chiếu đến bảng Tòa nhà
  • Giờ đây, bảng có một cột “ObjectType” của bạn có thể được tạo bằng khóa ngoại vào bảng Xây dựng. Bạn phải tham gia một số bảng để xác định loại tòa nhà đó là gì, nhưng dù sao thì bạn cũng phải làm điều đó. Điều đó hoặc lưu trữ dữ liệu dư thừa.

Bạn đã nhận thấy vấn đề với mô hình này, phải không? Điều gì để ngăn một Tòa nhà có các mục nhập trong hai hoặc nhiều bảng loại phụ? Rất vui vì bạn đã hỏi:

  1. Thêm một cột, có lẽ là “BuildingType”, vào Tòa nhà, chẳng hạn như char (1) với các giá trị được phép là {H, C, S, U} cho biết (duh) loại tòa nhà.
  2. Xây dựng một ràng buộc duy nhất trên BuildingID + BuildingType
  3. Có cột BulidingType trong bảng phụ. Đặt một ràng buộc kiểm tra lên nó để nó chỉ có thể được đặt thành giá trị (H cho bảng Bệnh viện, v.v.) Về lý thuyết, đây có thể là một cột được tính toán; trong thực tế, điều này sẽ không hoạt động do bước sau:
  4. Xây dựng khóa ngoại để liên kết các bảng bằng cách sử dụng cả hai cột

Thì đấy:Với một tập hợp hàng XÂY DỰNG có kiểu H, không thể đặt mục nhập trong bảng TRƯỜNG HỌC (với kiểu S) để tham chiếu Tòa nhà đó

Bạn sẽ nhớ lại rằng tôi đã nói rằng nó rất khó thực hiện.

Trên thực tế, câu hỏi lớn được đặt ra là:Điều này có đáng làm không? Nếu việc triển khai bốn (hoặc nhiều hơn, khi thời gian trôi qua) là hợp lý khi triển khai kiểu xây dựng / kiểu con (lợi thế chuẩn hóa hơn nữa:một nơi cho địa chỉ và các thuộc tính khác chung cho mọi tòa nhà, với các thuộc tính dành riêng cho tòa nhà được lưu trữ trong bảng con), nó có thể đáng để nỗ lực thêm để xây dựng và duy trì. Nếu không, thì bạn quay lại hình vuông:một mô hình logic khó triển khai trong RDBMS hiện đại trung bình.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thực thi thủ tục được lưu trữ bằng cách sử dụng khung thực thể

  2. SQL Server Internals:Lập kế hoạch Caching Pt. I - Tái sử dụng các kế hoạch

  3. Tôi không thể khởi động trình duyệt SQL Server

  4. Thu thập dữ liệu tự động về các công việc đã hoàn thành trong MS SQL Server

  5. Tham số Sniffing (hoặc Spoofing) trong SQL Server