外键&实体框架关系设计

时间:2013-02-22 18:54:24

标签: c# sql entity-framework foreign-keys

我目前在我的SQL数据库中有两个表。第一个,MasterPartsList只是我们系统中所有partnumbers的入口点,由属性pn给出。第二个表MasterPartsLists包含MasterPartsList中程序集的父子(Bill of Material)信息,由属性给出:

parentAssyPnpn,这是来自MasterPartNumbers的外键。

两个表格如下:

 MasterPartNumbers (parent) one -> many     MasterPartsLists (children)
 (PK) pn                                    (fk) pn
      desc                                       parentAssemblyPn  (could also be a fk)
                                                 qty
                                                 price

这引出了我的问题1:

Q1:对于MasterPartsList中的顶级组件部件号,我应该

一个。离开parentAssyPn NULL,然后使用相关的程序集部件号填充pn,并且表中没有主键

湾设置parentAssyPn = pn并使用partial key parentAssyPn pn`创建and

Q2:在这两种情况中的任何一种情况下,这将如何影响我如何从我的应用程序中适当地(向两个表)保存我的实体框架实体数据,在该应用程序中我从{{ 1}} S'

提前致谢!

1 个答案:

答案 0 :(得分:1)

您是否可以更改数据模型?

如果MasterPartsLists中的某个部分可以显示多个MasterPartNumbers的子项,那么这是一个多对多的关系。

我建议如下表格:

  

<强>部分

     

PartNumber(PK)

     

说明

     

价格

  

<强>装配

     

Parent_pn(PK)(FK)

     

PartNumber(PK)

     

数量

您的完整零件库存存储在零件表中。 您不在Assembly表中存储任何顶级程序集。

对于表装配,请将其读作: 要组装部分{Parent_pn},我需要{PartNumber}的{qty}项。 (根据需要重复完成组装Parent_pn。)

编辑: 让我们尝试一个简单的例子,其中笔由彩色墨水,桶和盖子组成。

您的零件表格如下:

  

1,红笔

     

2,蓝笔

     3,红色墨水

     

4,蓝色墨水

     

5,桶

     

6,上限

大会:

  

1,3,1 - 红笔需要红色墨水

     

1,5,1 - 红笔需要一桶

     

1,6,1 - 红笔需要一个上限

     

2,4,1 - 蓝笔需要蓝色墨水

     

2,5,1 - 蓝笔需要一桶

     

2,6,1 - 蓝笔需要一个上限

使用这个例子,我们可以看到这是一个多对多的关系: - 主要部分(例如红笔)由许多组件组成。 - 组件(例如帽)可用于组成许多主要部件。

这适用于您的方案吗?