Có thể nào trong SQL Server 2008 có bảng được tạo bằng 2 cột cùng lúc với khóa chính và khóa ngoài không? Nếu có, mã như thế sẽ như thế nào? Tôi đã tìm kiếm và không có gì.Khoá chính và khóa ngoài cùng lúc
Trả lời
Chắc chắn, không có vấn đề:
CREATE TABLE dbo.[User]
(
Id int NOT NULL IDENTITY PRIMARY KEY,
Name nvarchar(1024) NOT NULL
);
CREATE TABLE [Group]
(
Id int NOT NULL IDENTITY PRIMARY KEY,
Name nvarchar(1024) NOT NULL
);
CREATE TABLE [UserToGroup]
(
UserId int NOT NULL,
GroupId int NOT NULL,
PRIMARY KEY CLUSTERED (UserId, GroupId),
FOREIGN KEY (UserId) REFERENCES [User] (Id) ON UPDATE NO ACTION ON DELETE CASCADE,
FOREIGN KEY (GroupId) REFERENCES [Group] (Id) ON UPDATE NO ACTION ON DELETE CASCADE
);
này là khá thường được sử dụng để mô hình nhiều-nhiều mối quan hệ.
Giống như một FYI, trong 'information_schema.key_column_usage' cho bảng' UserToGroup', cả 'UserID' và' GroupID 'sẽ trả về hai hàng mỗi ... một cho PK, một cho FK ... [tham chiếu đến ...] (http://stackoverflow.com/a/15622288/623952) –
Đây là các cấu trúc hoàn toàn khác nhau.
A Khoá chính được sử dụng để thực thi tính duy nhất trong bảng và là số nhận dạng duy nhất cho một bản ghi nhất định.
A Khóa ngoài được sử dụng để tính toàn vẹn tham chiếu, để đảm bảo rằng giá trị tồn tại trong bảng khác.
Khóa ngoại cần tham chiếu khóa chính trong bảng khác.
Nếu bạn muốn có khóa ngoại cũng độc nhất, bạn có thể tạo ràng buộc FK và thêm chỉ mục/ràng buộc duy nhất vào trường đó.
Đối với mục đích tham chiếu, SQL Server cho phép FK tham chiếu đến UNIQUE CONSTRAINT
cũng như trường PRIMARY KEY
.
Chỉ cần một cách nhanh chóng lưu ý - từ trang Microsoft (http://msdn.microsoft.com/en-us/library/ms189049.aspx) ...
"Một ràng buộc khoá ngoại không phải chỉ được liên kết với một ràng buộc khoá chính trong bảng khác, nó cũng có thể được định nghĩa để tham khảo các cột của một ràng buộc UNIQUE trong một bảng khác. "
Không được sử dụng thường xuyên, nhưng hữu ích trong một số trường hợp.
Có lẽ đó không phải là ý tưởng hay vì bạn thường muốn cho phép các khóa ngoại trùng lặp lại trong bảng. Ngay cả khi bạn không phải bây giờ, trong tương lai, bạn có thể, tốt nhất là không nên làm điều này. Xem Is it fine to have foreign key as primary key?
Tại sao không? Giống như liên kết bạn đã đặt, nó cho biết có những trường hợp như mối quan hệ 1 đến 1 trong đó có thể là cần thiết –
Tôi không nói đó LUÔN là một ý tưởng tồi;) Bạn nói đúng, có thể có trường hợp ngoại lệ luôn là 1: 1. Ý kiến của tôi là ở đây để làm cho mọi người suy nghĩ về sự lựa chọn đúng đắn cho họ. – thebiggestlebowski
- 1. Khóa chính Composite và lỗi ràng buộc khoá ngoại
- 2. Hai khóa ngoài tham chiếu cùng một khóa chính
- 3. ScalaQuery nhiều khóa chính và khóa ngoài
- 4. POSTGRESQL Tham chiếu khóa ngoài Khoá chính của hai bảng khác nhau
- 5. Các khóa chính và khóa ngoài trong pgAdmin
- 6. MySQL - Sử dụng khóa ngoài làm khóa chính quá
- 7. khóa chính/khóa ngoài trong uml
- 8. Tại sao tạo ràng buộc khóa ngoài tham chiếu khóa chính của cùng một bảng từ trường khóa chính
- 9. khóa ngoài có thể tham chiếu đến khóa chính trong cùng một bảng không?
- 10. Khoá ngoài có điều kiện PostgreSQL
- 11. Có thể cùng một cột có khóa chính và khóa ngoài có ràng buộc với cột khác không
- 12. Ánh xạ khóa ngoài cho một khóa khác ngoài khóa chính
- 13. MySQL chính/kích thước khóa ngoài?
- 14. Có thể thả tất cả các ràng buộc khoá ngoại trên bàn cùng lúc trong mySQL 5 không?
- 15. Tại sao tôi không thể cập nhật nhiều cột cùng một lúc bằng Từ khoá?
- 16. Entity Framework Khóa ngoài là Mã khóa chính Đầu tiên
- 17. Khoá chính của máy chủ SQL View
- 18. Cách thay đổi giá trị của khóa chính và cập nhật khóa ngoại trong cùng một thời điểm
- 19. Làm thế nào để đặt khóa chính và khóa ngoài trong dữ liệu lõi?
- 20. Thuộc tính cơ sở dữ liệu có thể là khóa chính và khóa ngoài không?
- 21. Sử dụng rung và AVCaptureSession cùng lúc
- 22. VIM: Lưu và Chạy cùng một lúc?
- 23. django quản trị dữ liệu trường ngoài khóa chính thêm
- 24. Có lý do nào để sử dụng cả khóa chính và khóa duy nhất cùng nhau trên cùng một trường không?
- 25. Khóa ngoài và Lỗi MySQL
- 26. Khóa ngoài của MySQL trên cùng một bảng
- 27. SQL Nhiều Phím Nước ngoài là Khóa Chính
- 28. Thực thi một hạn chế nước ngoài chìa khóa để cột của cùng một bảng
- 29. Tổng hợp khóa chính, khóa ngoài. Tham chiếu đến đối tượng hoặc khóa?
- 30. EF không tạo liên kết khóa ngoài từ khóa ngoài trong bảng
Ý bạn là SQL sẽ tạo bảng trông như thế nào? –
Đây là một trường hợp rất phổ biến trên các khung công tác ORM cho phép ánh xạ thừa kế bằng cách thực hiện ánh xạ bảng cho mỗi lớp. Ví dụ, nếu một lớp B kế thừa từ một lớp A, và lớp được ánh xạ tới table_a và table_b, thì các cá thể của B có cùng một id trên table_a và table_b, và table_b định nghĩa một FK trên cột id của nó là table_a cột id. Chỉ cần cố gắng xác định FK và PK bằng cách sử dụng SQLServer Management Studio. –