我有以下示意圖的MySQL允許一個關係或其他關係,但不能同時爲同一ID
Book
id INT(12), // PK
title VARCHAR(50),
isbn VARCHAR(50),
price VARCHAR(8),
image VARCHAR(200)
Book_Genre
book_id INT(12), // COMPOUND KEY also references Book.id
genre_id INT(12) // COMPOUND KEY also references Genre.id
Book_Classification
book_id INT(12), // PK + FK, references Book.id
classification_id INT(12) // FK, references classification.id
Genre
id INT(12), // PK
title VARCHAR(50)
Classification
id INT(12), // PK
classification_type VARCHAR(20),
classification_description VARCHAR(200),
classification_value VARCHAR(12)
凡Book_Genre
和Book_Classification
充當從Book
join
表。從技術上講,採用這種當前方法,如果兩張join
表格都填充了book_id (Book.id)
,則圖書可以具有流派和分類。問題在於一本有分類的書被認爲是一部非文學書,而一本具有流派的書被認爲是一本小說書。
我在保持join
表,因爲它可以讓我給多小說類書籍多個流派,即行動&恐怖堅持,它允許我給非小說類書籍多個類別,如他們的LOC數及其DeweyDecimal值。
如果對另一個表的關係/引用已經存在,是否可以限制關係/對一個表的引用?
澄清: - 我不希望一本書如果它已經有一個流派,就不能給它一個分類,並且我不希望一本書能夠得到一個流派,如果它已經有一個分類。
(很抱歉的蹩腳的原理,而不是我的工作PC)
這個限制不能在具有聲明性約束的MySQL數據庫中強制執行;爲了讓MySQL執行這種限制,您必須在兩個關係表上添加BEFORE INSERT/BEFORE UPDATE觸發器。 – spencer7593
我甚至都沒有意識到這些觸發器存在,直到有人在這裏發佈它 - 這是一個理想的概念,所以非常感謝你和其他人提供這些觸發器,因爲它們對於我正在嘗試做的事實際上非常有用! @ spencer7593 –