Sql server 多个父对象的一个子表或多个父对象的多个子表
在设计用于管理多个实体的地址和联系人的表结构时,我有点困惑 在我的例子中,我有四种类型的实体,它们有多个地址和联系人 我已经为4个实体创建了4个父表。 但是在创建address and contacts表时,我考虑只为所有父实体创建一个address and contact表,并通过实体键将它们链接起来Sql server 多个父对象的一个子表或多个父对象的多个子表,sql-server,entity-framework,Sql Server,Entity Framework,在设计用于管理多个实体的地址和联系人的表结构时,我有点困惑 在我的例子中,我有四种类型的实体,它们有多个地址和联系人 我已经为4个实体创建了4个父表。 但是在创建address and contacts表时,我考虑只为所有父实体创建一个address and contact表,并通过实体键将它们链接起来 Id ContactType ParentId EntityKey Value 那么这是一个好主意还是应该为一种实体类型分别创建4个单独的子表呢。我的所有子表都具有相同的结构。 请推荐我。我不
Id
ContactType
ParentId
EntityKey
Value
那么这是一个好主意还是应该为一种实体类型分别创建4个单独的子表呢。我的所有子表都具有相同的结构。
请推荐我。我不确定该采用哪种设计 案例1:在任何时间都有数百万数据。查询经常被使用,并且在多个位置使用。任何父子表的表结构都可能发生变化。然后 多父多子 原因:当表增长如此之快时,你们就在表上进行分区。那个么为什么不从一开始就保持单独的表呢?同时你们也会少一个where条件 案例2:当表的增长是正常的,并且对它的查询使用在很少的地方,并且并发性较少时,您可以 还有一个父表和一个子表 ------------根据URL引用--------- 我跟你说的一模一样,在哪里 实体=包含其他详细信息和AddressTypeID和ParentID的地址表 我只是说不需要进一步的规范化,比如为AddressType创建表和引用AddressTypeID。因为AddressTypeID的最大值可以达到4-5。而insert可以传递硬编码值,比如1,2 假设我想用Entity1连接地址表,然后我的查询 从地址A.ParentID=p.EntityID1上的内部联接Entity1 E 其中AddressTypeID=1 同样地 从地址A.ParentID=p.EntityID2上的内部联接Entity2 E 其中AddressTypeID=2 等等 假设在另一个示例中,AddressType中有n个类型
然后,您必须创建单独的表,如url中所示。我创建了所有的父表和一个相应的子表,分别用于address和contact。我没有在父实体和子实体之间创建任何关系。我通过另外一个表建立了关系,在表中我对所有父实体和子实体进行了交叉引用。我添加了一个检查约束,它只检查一个父实体id是否已填充,其他父实体id列是否为空。我还添加了一个唯一索引以避免重复条目。这样,我还可以维护引用整数
这是db图。在EntityToAddTable中,我应该只有一个EntityID列的值,检查约束确保了这一点。请建议这是错误的还是坏主意 好的。在我的情况下,并发性将非常少,因为这些数据不会被频繁使用。但当我使用实体框架时,我发现了一个问题,我总是需要在查询中添加where子句。我不能在这里创建直接的外键关系,如果我选择多个父项和一个子项,我不相信,您不能在EF中创建多对一关系。但是,创建一个名为AddressType int.t'行的额外列是安全的,您可能需要筛选一种类型的所有地址,而不需要加入。“我添加了一个检查约束,该约束将检查仅填充了一个父实体id,而其他父实体id列为空。“这不清楚。你能用例子解释一下吗。画出所有的表。创建一个映射表是一个很棒的主意,在讨论时我突然忘记了。请检查数据库图表,看看我是如何关联这些表的。”。如果我做错了,请建议我。我可以选择更改我的数据库结构。在EntityToAddress映射表中,我将所有ParentID添加为一列,并将它们链接到各自的父表,并且允许空值。添加检查约束可确保一个地址id仅映射到一个父id,而其他父id列为空。请在另一个答案中找到db图。抱歉,Deb。绝对错误。您对第三范式的想法是正确的。但它出了问题。在EntityToAdd中,仅保留ParentType、EntityID、addressID。如果要反规范化,请在Address Table中保留ParentType、EntityID。谢谢您的建议。我会实现它,但是用这种方式我怎样才能保持引用的完整性呢?你能检查一下这篇文章吗。在这里,他们通过使用所有实体的基表来使用多态关联。请将此移到您的问题。这不是答案,可能很快就会被删除。