SQL数据库,实体数据模型和1对1实体

时间:2012-01-17 22:35:24

标签: c# sql-server-2005 entity-framework cardinality

我对EDM很陌生,过去写了很多ADO.Net的东西。我有三张桌子:

**Product:**
Prod_ID - PK

**Product_MaxLoan**
Prod_ID - PK

**Product_MinLoan**
Prod_ID - PK

这些表在MS SQL 2005中托管,尚未配置FK或约束,它们具有名义上的1对1关系。例如,ID为1的Product的每一行,Product_MaxLoan和Product_MinLoan中都会有一行ID为1。

在Visual Studio 2010中,我想正确设置EDM,以便将基数设置为1到1.我之前对表和下面的设置有FK约束,但是,这只允许0。 .1基数(为了迎合,我想,因为产品可能没有Product_MaxLoan或Product_MinLoan)。

**Product:**
Prod_ID - PK

**Product_MaxLoan**
ID - PK
Prod_ID - FK

**Product_MinLoan**
ID - PK
Prod_ID - FK

问题:

  • 您对在SQL 2005中设置这些表有何建议?对于EDM中的1对1关系,您会设置FK吗?
  • 您可以在SQL 2005中设置一个PK关系,EDM在从数据库导入时会读取该关系吗?
  • 产品包含大约300个属性,因此包含所有这些属性 单个表中的数据将是糟糕的数据库规范化(因此 许多1 - 1表)。最佳做法是将所有这些都放在一边 属性变成单个EDM类?我的直觉反应是打破它 因为它在数据库中的结构很多(这是我的ADO遗产 出现在前面),为每个逻辑部分提供一个课程 产品

您的建议将不胜感激。

致以最诚挚的问候,

标记

1 个答案:

答案 0 :(得分:0)

在数据库中使用此配置:

**Product:**
Prod_ID - PK

**Product_MaxLoan**
Prod_ID - PK, FK (to Product)

**Product_MinLoan**
Prod_ID - PK, FK (to Product)

这将强制数据库级别和EF中的一对一关系。关系本身将是1 - 0..1(Product可以不存在MaxLoanMinLoan),因为数据库中不存在真正的1:1。真正的1:1要求两个实体始终存在=如果第二个不存在则不能插入第一个,如果第一个不存在则不能插入第二个实体。如何在不关闭参照完整性的情况下插入它们?