gpt4 book ai didi

sql-server - 将地址表链接到多个其他表

转载 作者:行者123 更新时间:2023-12-02 23:53:25 24 4
gpt4 key购买 nike

我被要求向我们的数据库 (SQL Server 2012) 添加一个新的地址簿表。

为了简化数据库的相关部分,有三个表,每个表都以一对多的方式相互链接:公司(有很多)产品(有很多)项目,其想法是一个或多个地址将是能够存在于这些级别中的任何一个级别。我们的想法是,在前端系统中,用户将能够查看和选择他们指定的项目的特定地址以及与其父产品和公司相关的更通用的地址。现在的问题是如何最好地在数据库中对此进行建模。

到目前为止,我已经想到了两种可能的想法,所以想知道是否有人有类似的关系来为自己建模以及他们如何实现它?

想法一:新的地址表将另外包含三个字段:companyID、productID 和projectID。这些字段将与相关表相关,并且可以为空以表示公司和产品级别地址。例如companyID 2、productID 1、projectID NULL 是产品级别地址。我的问题是,我将关系信息存储在表中,因此如果项目更改为与不同的产品相关,则该表中的数据将不正确。我可能可以将除我感兴趣的级别之外的所有内容都设为 NULL,但这将使获取父地址变得更加困难

想法二:地址表上有一个typeID 和一个genericID。 genericID 可以包含来自公司、产品和项目表的 ID,其中 typeID 确定它来自哪个表。我有点困惑如何设置必要的约束来做到这一点,并且想知道这在将来是否会变得棘手

非常感谢,

最佳答案

我建议使用想法一并阻止想法二。

第二个想法称为 Polymorphic Association反模式
目标:引用多个 parent
由此产生的副作用:使用双用途外键将违反第一范式(原子问题),失去引用完整性
解决方案:简化关系

可以通过两种方式实现关系的简化:

  • 拥有多个可为空的锻造 key (想法 1):这将是如果使用的表格(产品、项目等)简单且适用的关系是有限的。 (想想当他们长大后会更多)
  • 另一个更通用的解决方案是使用继承。定义一个新实体作为(产品、项目...)的基表以满足可寻址。也许命名为“组织单位”更合理一些。该organization_unit 表的主键将是(产品、项目...)的主键。其他集合(如地址、图像、契约(Contract)...表)将与此基表相关。 enter image description here

关于sql-server - 将地址表链接到多个其他表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27168747/

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