[英]How to model referential integrity for one-to-many relationship, where many > 0
[英]How to ensure referential integrity at circular relationship tables
我有類似的架構這
在這個數據庫中
我的問題是,如何確保the visitor and its role should have same chapter_id
有任何想法嗎?
您不需要在visitor表中的Chapter_id。 這是多余的,因為您可以從role_id告訴訪問者所屬的章節。
筆記
[p x] = predicate x
(c x.y) = constraint x.y
PK = Primary Key
AK = Alternate Key (Unique)
SK = Proper Superkey (Unique)
FK = Foreign Key
All attributes (columns) NOT NULL
[p 1]角色ROLE_ID
存在。
(c 1.1)角色由ROLE_ID
標識 。
role {ROLE_ID} -- p 1
PK {ROLE_ID} -- c 1.1
[p 2]人PERSON_ID
存在。
(c 2.1)人員由PERSON_ID
標識 。
person {PERSON_ID} -- p 2
PK {PERSON_ID} -- c 2.1
[p 3]存在CHAPTER_ID
章。
(c 3.1)章由CHAPTER_ID
標識 。
chapter {CHAPTER_ID} -- p 3
PK {CHAPTER_ID} -- c 3.1
[p 4]人PERSON_ID
具有角色ROLE_ID
。
(c 4.1)對於每個人,該人可以擔任多個職務;
對於每個角色,該角色可能屬於一個以上的人。
(c 4.2)如果某人有角色,則該人必須存在 。
(c 4.3)如果一個人有一個角色,那么該角色必須存在 。
person_role {PERSON_ID, ROLE_ID} -- p 4
PK {PERSON_ID, ROLE_ID} -- c 4.1
FK1 {PERSON_ID} REFERENCES
person {PERSON_ID} -- c 4.2
FK2 {ROLE_ID} REFERENCES
role {ROLE_ID} -- c 4.3
[p 5]第章章CHAPTER_ID
角色為ROLE_ID
。
(c 5.1)對於每一章,該章可以扮演多個角色; 對於每個角色,該角色可能屬於多個章節。
(c 5.2)如果某章有角色,則該章必須存在 。
(c 5.3)如果某章具有角色,則該角色必須存在 。
chapter_role {CHAPTER_ID, ROLE_ID} -- p 5
PK {CHAPTER_ID, ROLE_ID} -- c 5.1
FK1 {CHAPTER_ID} REFERENCES
chapter {CHAPTER_ID} -- c 5.2
FK2 {ROLE_ID} REFERENCES
role {ROLE_ID} -- c 5.3
[第6頁]人PERSON_ID
與角色ROLE_ID
參觀章CHAPTER_ID
其作用ROLE_ID
-在某個時間點。
(c 6.1)對於每個人,在某個時間點該人可能訪問了多個章節。 對於每一章,在某個時間點可能已經有多個人訪問了該章。
(c 6.2)如果某人訪問了某個具有某一角色的章節,則該人必須具有該角色。
(c 6.3)如果有角色的人訪問了一章,則該章必須具有該角色。
visit {PERSON_ID, CHAPTER_ID, ROLE_ID} -- p 6
PK {PERSON_ID, CHAPTER_ID} -- c 6.1
FK1 {PERSON_ID, ROLE_ID} REFERENCES
person_role {PERSON_ID, ROLE_ID} -- c 6.2
FK2 {CHAPTER_ID, ROLE_ID} REFERENCES
chapter_role {CHAPTER_ID, ROLE_ID} -- c 6.3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.