微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数据建模问题:两个不相关的表拥有的弱实体

如何解决数据建模问题:两个不相关的表拥有的弱实体

|| 假设我有下表:\“ User \”,\“ Computer \”和\“ Command \”。用户和计算机可能具有0或1个与之关联的命令。命令始终由这两个中的一个(并且只有一个)拥有。我该如何建模? 我想到了这样的事情:
user(id,command_id?,other1)
computer(id,other2)
command(id,other3)
这样可以保证用户/计算机可以有0个或1个命令,但允许一个命令拥有多个所有者。 但是由于command是一个弱实体(我想,如果我错了,请更正我),因此应该在外键中引用其所有者。这导致以下结构:
user(id,owner_id,owner_type(user|computer),other3)
但是,这允许用户或计算机拥有多个命令。它看起来也不如第一个选项好。 有什么建议吗?     

解决方法

我不相信使用标准SQL可以做到这一点。可能有一个DBMS提供了一个我只是不知道的好的解决方案。 我已经看到了过去使用的两种解决方案。我真的不喜欢第二种解决方案,因为您不能使用真正的FK关系。定义FK约束时,必须指定表。但是,该表由owner_type列中的内容确定。此外,如果定义了第三个所有者类型,则必须引入另一个字符串来表示您的模型。这开始变得混乱。 我更喜欢第一种解决方案,但命令表上带有is_owned布尔值列。该字段告诉我是否有人已经拥有该命令。缺点是我不仅仅通过查看命令记录就知道谁拥有该命令。好处是,我可以定义一个真正的FK约束,并且如果我拥有第三个+ owner_type,则可以简单地添加其他表,而无需对现有模型进行任何更改。     ,您可以使用专业化。
User(id,other1)
Computer(id,other2)
Command(id,other3)

User_cmd(user_id,cmd_id)
Comp_cmd(comp_id,cmd_id)
    ,听起来
command
的域是一个集合,是set4ѭ和
computers
的并集。您可以添加一个代表此集合的人工实体,例如
command_owner
user(id,other1)
computer(id,other2)
command(id,other3)
command_owner(id,user_id,computer_id,command_id)
该表中的
command_id
user_id
computer_id
需要唯一性约束。但这引入了一个新的边缘情况,其中一行可能指定了
computer_id
user_id
,我认为您的模型不允许这样做。您将需要某种超出模型的规则来实施此规则,例如触发器或程序约束。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。