给SO中的每个人的好日子。为具有多个可选列和依赖关系的表设计数据库
我在为我的项目设计数据库时出现问题,这是eyelet工厂生产模块。为了记录,我为我的项目使用了MySQL,C#.NET Framework和NHibernate。
故事背景
我的项目,将有项目表。项目定义了包括在生产孔眼中的所有项目。它可以是可以出售的原材料(卷材,油漆,板材等),中间产品(现在的打孔产品)和最终产品(装配产品,抛光产品,彩色产品等)。
所有项目都有名称,股票,阈值列,但一些项目可以有例如外径或颜色列,而一些项目没有那个。 可选列这里依赖于项目类型(例如线圈只有外径,内径和高度,而Paint只有颜色,最终产品包含所有这些)。 项目也有多个单位(千克,个人电脑,包等),可以转换为其他单位。同样,某些项目可能只有Kg单位关联,而其他项目可能有Kg和Pcs单位关联(以及它们之间的转换速率)。
这就是我的想法。
- 项目
- ID
- ItemType_ID [FK]
- 名称
- 库存
- Treshold
- 时间戳(CreatedAt,UpdatedAt,DeletedAt)
- IsDelet ED
- 尺寸
- 的Item_ID [FK]
- 外径
- 内径
- 身高
- 颜色
- 的Item_ID [FK]
- 颜色
- 的ItemType
- ID
- 名称
- 单位
- ID
- 名称
Item_Unit关联表
- 的Item_ID [PK]
- UNIT_ID [PK]
......还没说完,来这里寻求建议。
我想问的事情是:
- 这是我的第二个设计,而我的第一个设计将在项目表中的所有可选 列,并指派空当用户没有输入该列的 值。使用我的第一个设计更好吗?导致它 简化我的代码(只选择1个表格)。但是我听说在数据库中有空值是不好的?
- 在这种情况下使用继承更好吗?使用父表和子表(项目表和线圈表作为孩子)?
- 装配项目,彩色项目,抛光项目,它们的前提项目可以是中级项目或其他最终项目(某些彩色项目可以由中间项目+涂料制造,其他一些彩色项目可以从装配项目+绘画,而装配项目总是由中间项目组成)。我如何设计表格以便查找?在我的主要制作形式中,将会有组合框选取组件。
- 如何在此场景中存储物品转化率?
任何意见,更正或甚至整个作出了赞赏。非常感谢你