Làm thế nào để bạn tạo mối quan hệ một đến nhiều bằng cách sử dụng SQL Server?Tạo mối quan hệ một đến nhiều bằng cách sử dụng SQL Server
Trả lời
- Xác định hai bảng (ví dụ A và B), với họ riêng chính chủ chốt
- Xác định một cột trong Bảng A như có một mối quan hệ chính nước ngoài dựa trên khóa chính của bảng B
Điều này có nghĩa là Bảng A có thể có một hoặc nhiều hồ sơ liên quan đến một bản ghi duy nhất trong Bảng B.
Nếu bạn đã có bảng, hãy sử dụng câu lệnh ALTER TABLE để tạo ràng buộc khóa ngoài:
ALTER TABLE A ADD CONSTRAINT fk_b FOREIGN KEY (b_id) references b(id)
fk_b
: Tên của ràng buộc khoá ngoại, phải là duy nhất cơ sở dữ liệub_id
: Tên cột trong Bảng A bạn đang tạo mối quan hệ khoá ngoại trênb
: Tên của bảng, trong trường hợp này bid
: Tên của cột trong bảng b
cách dễ nhất để "Xác định cột trong Bảng A là có mối quan hệ khóa ngoài dựa trên khóa chính của Bảng B" – Tim
@George: Cập nhật để bao gồm lệnh ALTER TABLE ADD CONSTRAINT, giả sử các bảng tồn tại. –
Bạn đã giải thích điều này một cách hoàn hảo cảm ơn bạn. Hy vọng rằng Microsoft cuối cùng sẽ học cách làm như vậy. – Lopsided
Nếu bạn đang nói về hai loại enitities , nói giáo viên và học sinh, bạn sẽ tạo ra hai bảng cho mỗi và một bảng thứ ba để lưu trữ mối quan hệ. Bảng thứ ba này có thể có hai cột, nói giáo viênID và StudentId. Nếu đây không phải là những gì bạn đang tìm kiếm, hãy xây dựng câu hỏi của bạn.
Tôi không nghĩ rằng đây là những gì tôi muốn. Tôi đã chuẩn hóa một bảng và bây giờ tôi muốn tạo ra một mối quan hệ. – Tim
bỏ phiếu xuống do giải pháp được cung cấp là một giải pháp cho mối quan hệ nhiều-nhiều. Ngay cả khi sử dụng cho một-nhiều, đây là thêm chi phí khi phải chạy tham gia. Cộng với bạn phải tham gia bên trong qua 3 bảng, do đó nhiều hơn để gõ. – andrewWinn
Cái này được sử dụng để tạo mối quan hệ m-n :) – nXqd
Nếu bạn không sử dụng SSMS thì đây là cú pháp:
ALTER TABLE <table_name>
ADD <constraint_name> FOREIGN KEY
(<column_name1> ,
<column_name2>)
REFERENCES <table_name>
(<column_name1> ,
<column_name2>)
Đây là cách tôi thường làm điều đó (sql server).
Create Table Master (
MasterID int identity(1,1) primary key,
Stuff varchar(10)
)
GO
Create Table Detail (
DetailID int identity(1,1) primary key,
MasterID int references Master, --use 'references'
Stuff varchar(10))
GO
Insert into Master values('value')
--(1 row(s) affected)
GO
Insert into Detail values (1, 'Value1') -- Works
--(1 row(s) affected)
insert into Detail values (2, 'Value2') -- Fails
--Msg 547, Level 16, State 0, Line 2
--The INSERT statement conflicted with the FOREIGN KEY constraint "FK__Detail__MasterID__0C70CFB4".
--The conflict occurred in database "Play", table "dbo.Master", column 'MasterID'.
--The statement has been terminated.
Như bạn có thể thấy lần chèn thứ hai vào chi tiết không thành công do khóa ngoại. Đây là một liên kết web tốt hiển thị nhiều cú pháp khác nhau để xác định FK trong khi tạo bảng hoặc sau.
Đây là một ví dụ đơn giản của một tấm gương tự cổ điển. Mỗi Khách hàng có thể có nhiều Đơn đặt hàng s và mỗi Đơn đặt hàng có thể bao gồm nhiều Đơn hàng số s.
Bạn tạo mối quan hệ bằng cách thêm cột foreign key. Mỗi bản ghi Order có một CustomerID trong nó, trỏ đến ID của khách hàng. Tương tự, mỗi OrderLine có một giá trị OrderID. Đây là cách sơ đồ cơ sở dữ liệu trông:
SQL one-to-many diagram http://www.subbot.net/personal/external/stackoverflow/sql-one-to-many.png
Trong sơ đồ này, có thực tế foreign key constraints. Chúng là tùy chọn, nhưng chúng đảm bảo tính toàn vẹn của dữ liệu của bạn. Ngoài ra, họ làm cho cấu trúc của cơ sở dữ liệu của bạn rõ ràng hơn cho bất cứ ai sử dụng nó.
Tôi giả sử bạn biết cách tự tạo bảng. Sau đó, bạn chỉ cần xác định mối quan hệ giữa chúng. Tất nhiên bạn có thể định nghĩa các ràng buộc trong T-SQL (như được đăng bởi nhiều người), nhưng chúng cũng dễ dàng được thêm vào bằng cách sử dụng trình thiết kế. Sử dụng SQL Management Studio, bạn có thể nhấp chuột phải vào bảng Đơn đặt hàng, nhấp vào Thiết kế (Tôi nghĩ nó có thể được gọi là Chỉnh sửa dưới 2005). Sau đó, bất kỳ nơi nào trong cửa sổ mở ra nhấp chuột phải và chọn Mối quan hệ.
Bạn sẽ nhận được một hộp thoại khác, ở bên phải có chế độ xem lưới. Một trong những dòng đầu tiên đọc "Đặc điểm bảng và cột". Nhấp vào dòng đó, sau đó nhấp lại vào nút [...] nhỏ xuất hiện ở bên phải. Bạn sẽ nhận được hộp thoại này:
Foreign key constraint http://www.subbot.net/personal/external/stackoverflow/sql-fk.png
Các tự bảng nên đã được chọn ở bên phải. Chọn bảng Khách hàng ở menu thả xuống bên trái. Sau đó, trong lưới bên trái, chọn cột ID
. Trong lưới bên phải, chọn cột CustomerID
. Đóng hộp thoại và tiếp theo. Nhấn Ctrl + S để lưu.
Có ràng buộc này sẽ đảm bảo rằng không có Hồ sơ đặt hàng nào có thể tồn tại mà không có hồ sơ Khách hàng kèm theo.
Để truy vấn cơ sở dữ liệu hiệu quả như thế này, bạn có thể muốn read up on JOINs.
- 1. Truy vấn SQL từ một đến nhiều mối quan hệ
- 2. Cách tính một đến nhiều mối quan hệ
- 3. Tham chiếu tuần hoàn trong mối quan hệ nhiều chiều đến nhiều mối quan hệ
- 4. Làm cách nào để tạo nhiều mối quan hệ bằng cách sử dụng Giàn giáo?
- 5. SSAS Một đến nhiều mối quan hệ chiều
- 6. JPA - Duy trì mối quan hệ Một đến Nhiều
- 7. Lọc Nhiều người đến Nhiều mối quan hệ trong Django
- 8. MS SQL tạo mối quan hệ nhiều-nhiều với bảng nối
- 9. Chuyển đổi một mối quan hệ nhiều-nhiều đến một-nhiều trong PostgreSQL
- 10. Yii nhiều mối quan hệ
- 11. Yii framework Nhiều mối quan hệ Nhiều đến
- 12. cách tạo truy vấn động cho mối quan hệ nhiều người một bằng cách sử dụng CriteriaBuilder của JPA 2.0
- 13. SQL: mối quan hệ nhiều-nhiều, trong điều kiện
- 14. Đăng một mối quan hệ một-nhiều
- 15. Mối quan hệ giữa nhiều mối quan hệ giữa nhiều mô hình
- 16. Giảm thiểu các truy vấn SQL bằng cách sử dụng tham gia với mối quan hệ một-nhiều
- 17. Sử dụng Carrierwave với một đến nhiều mối quan hệ giữa các mô hình
- 18. Thể hiện mối quan hệ 1 đến nhiều trong UML
- 19. SQL cho một nhiều mối quan hệ sử dụng bên trong tham gia
- 20. mối quan hệ One-to-Nhiều trong (Postgre) SQL
- 21. Nhiều mối quan hệ với nhiều người
- 22. Truy vấn máy chủ SQL cho nhiều mối quan hệ
- 23. SQL Server 2005 thiết kế cơ sở dữ liệu - nhiều-nhiều mối quan hệ với hệ thống phân cấp
- 24. Mối quan hệ nhiều-nhiều chung chung
- 25. Hibernate: đặt nhiều mối quan hệ một-nhiều
- 26. séc JPQL nhiều-nhiều mối quan hệ
- 27. MySQL & PHP - Tạo nhiều mối quan hệ cha mẹ con
- 28. Làm cách nào để tạo các mối quan hệ nhiều-nhiều-nhiều trong Rails?
- 29. Nhiều vấn đề được chọn với mối quan hệ HABTM bằng cách sử dụng Rails 4
- 30. Nhiều mối quan hệ với dữ liệu bổ sung về mối quan hệ
Giáo sư của tôi tại USC đã cho chúng tôi biết quy tắc đơn giản này: khi có một mối quan hệ với nhiều người, hãy đặt khóa của 'một' làm khóa ngoại ở phía 'nhiều'. Và khi có nhiều mối quan hệ, hãy đặt cả hai khóa làm khóa ngoài trong bảng thứ ba. – user3885927