CREATE TABLE gbook_class (
id INT IDENTITY(1,1) PRIMARY KEY,
classname NVARCHAR(50) NULL
);
CREATE TABLE gbook (
id INT IDENTITY(1,1) PRIMARY KEY,
title NVARCHAR(50),
content NVARCHAR(MAX),
classid INT NULL,
userid INT NULL,
-- 其他欄位略
CONSTRAINT FK_gbook_class FOREIGN KEY (classid) REFERENCES gbook_class(id)
);
gbook)建立 classid 參照「一」的一方(gbook_class)主鍵 id。ON DELETE SET NULL(刪除分類時留言分類設為空)而非 CASCADE(避免誤刪留言)。ALTER TABLE gbook
ADD CONSTRAINT FK_gbook_class
FOREIGN KEY (classid) REFERENCES gbook_class(id)
ON DELETE SET NULL ON UPDATE CASCADE;
SELECT g.title, g.content, c.classname
FROM gbook g
LEFT JOIN gbook_class c ON g.classid = c.id
ORDER BY g.id DESC;
同理建立 users 表,gbook.userid 加外鍵參照 users.id,實現留言作者資訊查詢。
主外鍵設計核心:識別實體關係(一對多、多對多),在「多」的一方加入參照欄位並建立外鍵約束,配合適當的級聯規則確保資料完整性。