我被要求向我们的数据库(SQL Server 2012)添加一个新的地址簿表。
为了简化数据库的相关部分,存在三个表,每个表以一对多的方式相互链接: 公司(有许多) 产品(有许多) 项目 其想法是一个或多个地址将能够存在在这些级别中的任何一个级别。我们的想法是,在前端系统中,用户将能够查看和选择他们指定的项目的特定地址以及与其父产品和公司相关的更通用的地址。现在的问题是如何最好地在数据库中对此进行建模。
到目前为止,我已经想到了两种可能的想法,所以想知道是否有人有类似的关系来为自己建模以及他们如何实现它?
想法一: 新的地址表将额外包含三个字段:companyID、productID和projectID。这些字段将与相关表相关,并且可以为空以表示公司和产品级别地址。例如,companyID 2、productID 1、projectID NULL 是产品级别地址。我的问题是,我将关系信息存储在表中,因此如果项目更改为与不同的产品相关,则该表中的数据将不正确。我可能可以将除我感兴趣的级别之外的所有级别都设为 NULL,但这将使获取父地址变得有点困难
想法二: 在地址表上有一个typeID和一个genericID。genericID 可以包含来自公司、产品和项目表的 ID,其中 typeID 确定它来自哪个表。我有点困惑如何设置必要的约束来做到这一点,并且想知道将来这是否会变得棘手
非常感谢,