gpt4 book ai didi

sql-server - 如何添加带有自定义验证或其他内容的过滤外键来解决以下需求?

转载 作者:行者123 更新时间:2023-12-03 09:13:15 25 4
gpt4 key购买 nike

我有以下数据库设计,但我想知道如何限制表CagesOfCatsAndDogs匹配中的插入:

Cat_ID and Dog_ID must have the same Owner_ID that we are adding to the field Owner_ID of the table CagesOfCatsAndDogs.

enter image description here

有些人告诉我通过触发器来做到这一点,好吧,这听起来不错,但如果有人有其他方法或知道一些最佳实践来设计那就太好了。

最佳答案

|宠物类型PET_TYPE_ID存在。

宠物类型由 PET_TYPE_ID 标识。

PetType {PET_TYPE_ID}    KEY {PET_TYPE_ID}


| 所有者 OWNER_ID 存在。

所有者由 OWNER_ID 标识。

Owner {OWNER_ID}  KEY {OWNER_ID}


| 宠物类型 PET_TYPE_ID 的宠物 PET_ID 由所有者 OWNER_ID 拥有。

宠物由PET_ID识别。

每只宠物都属于一种宠物类型,对于每种宠物类型,可能有不止一只宠物属于该类型。

每只宠物都由一位主人拥有,对于每位主人来说,该主人可能拥有不止一只宠物。

如果宠物属于宠物类型,则该宠物类型必须存在。

如果宠物由主人拥有,则该主人必须存在。

Pet {PET_ID, PET_TYPE_ID, OWNER_ID}KEY {PET_ID}KEY {PET_ID, OWNER_ID}  -- superkey, redundant here but needed in SQL                        -- to be referenced by a FKFOREIGN KEY {PET_TYPE_ID} REFERENCES PetType {PET_TYPE_ID}FOREIGN KEY {OWNER_ID}    REFERENCES Owner {OWNER_ID}


| 笼子 CAGE_ID 归所有者 OWNER_ID 所有。

每个笼子都由一位所有者拥有,对于每个所有者来说,该所有者可能拥有多个笼子。

如果笼子由所有者拥有,则该所有者必须存在。

Cage {CAGE_ID, OWNER_ID} KEY {CAGE_ID} KEY {CAGE_ID, OWNER_ID}  -- the superkey, redundant here but needed in SQL                          -- to be referenced by a FKFOREIGN KEY {OWNER_ID} REFERENCES Owner {OWNER_ID}


| 主人 OWNER_ID 拥有的宠物 PET_ID 位于笼子 CAGE_ID 中。

每只宠物都位于一个笼子中,对于每个笼子,该笼子中可能有不止一只宠物。

如果宠物被关在笼子里,那么该宠物一定存在。

如果宠物位于笼子中,则该笼子必须存在。

如果主人拥有的宠物位于笼子中,则该笼子归该主人所有。

PetInCage {PET_ID, CAGE_ID, OWNER_ID}      KEY {PET_ID}FOREIGN KEY {PET_ID,  OWNER_ID} REFERENCES Pet  {PET_ID,  OWNER_ID}FOREIGN KEY {CAGE_ID, OWNER_ID} REFERENCES Cage {CAGE_ID, OWNER_ID}

注释:

  • 这里的所有内容都是NOT NULL
  • 使用 UNIQUE 创建备用 key {CAGE_ID, OWNER_ID}{PET_ID, OWNER_ID}

enter image description here

关于sql-server - 如何添加带有自定义验证或其他内容的过滤外键来解决以下需求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39899475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com