简化数据库ER图/模式

5
为了学校项目,我们需要创建自己的数据库。我决定创建一个管理电子元件库存的数据库。作为要求,我们需要创建一个ER图,然后从该图导出数据库模式。不幸的是,教授认为我创建的图可以简化,"Part"实体是不必要的。
这是我想出的图表,这是导出的模式
如果我删除"Part"实体,那么为了让"Circuit"实体使用任意数量的任何部件,并且每个部件都与可能的任何电路相关联,我将不得不从每种组件类型到电路中创建单独的M对N关系。每个关系都会生成一个新表。这肯定会超过我们允许的项目最大表数。
如果教授特别提到"Part"是不必要的,那么肯定有一种方法可以去除它,从而得到更简单的ER图和模式——但我看不出来是什么。
也许你们能看出来,给我一个提示?

编辑: Dan W提出了一个很好的建议。我可以通过为每个部件类型(电容器、电阻器等)分配自己的键来消除该部分。然后,在使用零件内,包括到这些零件的外键。我必须假设表的每个条目只与单个部分相关联,其余部分为空。这是得到的模式。这个模式应该很好用。但现在我必须确定ER图的修改将对应于此模式。

编辑2: 我得出结论,我正在寻找的关系是n元的。根据几个来源,要从n元转换为模式,您需要将每个参与实体类型关系的主键作为外键包含。然后添加简单属性。 就是我想到的。


1
你能否将PartID更改为ResistorID、CapacitorID等,然后将这些列添加到Uses_Part表中呢? - Dan W
2
我非常喜欢你的设计。我不会做任何修改。有不同种类的零件,具有不同的属性,并且每个零件都有单独的实体(电阻器,电容器等)。这些部分实体需要作为超类型实体。正如您所说的那样(正确地),以在M:N关系中使用。 - ypercubeᵀᴹ
2
你的EDIT-2设计中的n元关系不能让你存储各种电路。例如,只有电阻器的电路。如果所有电路都由恰好具有1个电阻器、1个电容器、1个集成电路和1个晶体管的“线”组成,那么该设计就可以了。但这似乎不太符合电路的概念。 - ypercubeᵀᴹ
1
我认为在ER建模阶段操纵空值是走了错误的道路。 - ypercubeᵀᴹ
2
我能想到唯一能够按照你的限制(表数)移除 Part 实体的方式是通过(过度)简化模型。如果 Circuit-Part 关系被认为是 1:N(而不是 M:N),那么你可以通过给所有子类型实体添加 CircuitId 列来跳过 Part 实体(这样,Circuit 将与每个其他表都有一个 1:N 的关系)。 - ypercubeᵀᴹ
显示剩余7条评论
1个回答

1

你有一个严格的最大表数量(物理设计),但是在ER图中,你是否受限于该实体(逻辑设计)数量?你所有关于零件的实体 - 电阻器、晶体管、电容器和通用IC - 都可以存储在一个零件表中,并具有零件、电阻器、晶体管、电容器和通用IC的所有属性作为可空列。如果一个属性对所有类型都有效,则它不是可空的。在零件表中添加另一列,用于标识部件的类型(电阻器、晶体管、电容器或IC),尽管在所有实体中都已经有一个类型列,该列也可能用于此目的。

现在你模式中的零件表:

PartID (PK)
Quantity
Drawer
Part Type
Value
Tolerance
Subtype
Power Rating
Voltage
Term_Style
Diam
Height
Lead_Space
Name
Case
Polarity
Use
V_CE
P_D
I_C
H_FE
Package
Pins
Description

你可以在模式中删除电阻、电容、晶体管和通用集成电路表。但是请将这些实体保留在ER图中,因为它显示了每种零件类型所需的Parts表属性(不应为空)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接