Tôi có sau DDL mà tôi đang sử dụng với SQL Server 2012:Tôi có cần phải chỉ định ON DELETE NO ACTION trên Khóa Ngoại của tôi không?
CREATE TABLE Subject (
[SubjectId] INT IDENTITY (1, 1) NOT NULL,
[Name] NVARCHAR (50) Not NULL,
CONSTRAINT [PK_Subject] PRIMARY KEY CLUSTERED ([SubjectId] ASC)
)
CREATE TABLE Topic (
[TopicId] INT IDENTITY (1, 1) NOT NULL,
[Name] NVARCHAR (50) NOT NULL,
[SubjectId] INT NOT NULL,
CONSTRAINT [PK_Topic] PRIMARY KEY CLUSTERED ([TopicId] ASC)
)
ALTER TABLE [Topic] WITH CHECK ADD CONSTRAINT [FK_TopicSubject]
FOREIGN KEY([SubjectId]) REFERENCES [Subject] ([SubjectId])
ON DELETE NO ACTION
Những gì tôi muốn là cho SQL Server để ngăn chặn tôi xóa một phụ huynh nếu một tham chiếu đến mẹ mà tồn tại trong con? Ví dụ: tôi muốn xóa trên subjectID = 3 trong Chủ đề thất bại nếu có trẻ em có SubjectId là 3.
Vì điều này tôi không rõ ràng và dường như không tìm thấy câu trả lời. Tôi có cần phải thêm "DELETE NO ACTION" hoặc tôi không thể xóa ba từ này.
Tôi đang đặt câu hỏi này như trong một câu hỏi tương tự, tôi đã có câu trả lời rằng tôi nên xác định trình kích hoạt trên cấp độ gốc. Tuy nhiên tôi nghĩ rằng chỉ cần xác định khóa ngoại sẽ ngăn tôi xóa cha mẹ nếu một đứa trẻ tồn tại.
Dave - Tôi xin lỗi nhưng tôi hơi bối rối bởi "Chỉ định hành động nào xảy ra với các hàng trong bảng bị thay đổi, nếu những hàng đó có mối quan hệ tham chiếu và hàng được tham chiếu bị xóa khỏi bảng cha". Điều này có ý nghĩa gì khi nó liên quan đến các bảng Chủ đề và Chủ đề của tôi? – Melina
Có Chủ đề là Phụ huynh và Chủ đề là bảng con. – DaveShaw
Đã cập nhật câu trả lời của tôi. – DaveShaw