Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 多个父对象的一个子表或多个父对象的多个子表_Sql Server_Entity Framework - Fatal编程技术网

Sql server 多个父对象的一个子表或多个父对象的多个子表

Sql server 多个父对象的一个子表或多个父对象的多个子表,sql-server,entity-framework,Sql Server,Entity Framework,在设计用于管理多个实体的地址和联系人的表结构时,我有点困惑 在我的例子中,我有四种类型的实体,它们有多个地址和联系人 我已经为4个实体创建了4个父表。 但是在创建address and contacts表时,我考虑只为所有父实体创建一个address and contact表,并通过实体键将它们链接起来 Id ContactType ParentId EntityKey Value 那么这是一个好主意还是应该为一种实体类型分别创建4个单独的子表呢。我的所有子表都具有相同的结构。 请推荐我。我不

在设计用于管理多个实体的地址和联系人的表结构时,我有点困惑

在我的例子中,我有四种类型的实体,它们有多个地址和联系人

我已经为4个实体创建了4个父表。 但是在创建address and contacts表时,我考虑只为所有父实体创建一个address and contact表,并通过实体键将它们链接起来

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。谢谢您的建议。我会实现它,但是用这种方式我怎样才能保持引用的完整性呢?你能检查一下这篇文章吗。在这里,他们通过使用所有实体的基表来使用多态关联。请将此移到您的问题。这不是答案,可能很快就会被删除。