2

给SO中的每个人的好日子。为具有多个可选列和依赖关系的表设计数据库

我在为我的项目设计数据库时出现问题,这是eyelet工厂生产模块。为了记录,我为我的项目使用了MySQL,C#.NET Framework和NHibernate。

故事背景

我的项目,将有项目表。项目定义了包括在生产孔眼中的所有项目。它可以是可以出售的原材料(卷材,油漆,板材等),中间产品(现在的打孔产品)和最终产品(装配产品,抛光产品,彩色产品等)。

所有项目都有名称股票阈值列,但一些项目可以有例如外径颜色列,而一些项目没有那个。 可选列这里依赖于项目类型(例如线圈只有外径,内径和高度,而Paint只有颜色,最终产品包含所有这些)。 项目也有多个单位(千克,个人电脑,包等),可以转换为其他单位。同样,某些项目可能只有Kg单位关联,而其他项目可能有Kg和Pcs单位关联(以及它们之间的转换速率)。

这就是我的想法。

  1. 项目
    • ID
    • ItemType_ID [FK]
    • 名称
    • 库存
    • Treshold
    • 时间戳(CreatedAt,UpdatedAt,DeletedAt)
    • IsDelet ED
  2. 尺寸
    • 的Item_ID [FK]
    • 外径
    • 内径
    • 身高
  3. 颜色
    • 的Item_ID [FK]
    • 颜色
  4. 的ItemType
    • ID
    • 名称
  5. 单位
    • ID
    • 名称
  6. Item_Unit关联表

    • 的Item_ID [PK]
    • UNIT_ID [PK]

    ......还没说完,来这里寻求建议。

我想问的事情是:

  1. 这是我的第二个设计,而我的第一个设计将在项目表中的所有可选 列,并指派空当用户没有输入该列的 值。使用我的第一个设计更好吗?导致它 简化我的代码(只选择1个表格)。但是我听说在数据库中有空值是不好的?
  2. 在这种情况下使用继承更好吗?使用父表和子表(项目表和线圈表作为孩子)?
  3. 装配项目,彩色项目,抛光项目,它们的前提项目可以是中级项目或其他最终项目(某些彩色项目可以由中间项目+涂料制造,其他一些彩色项目可以从装配项目+绘画,而装配项目总是由中间项目组成)。我如何设计表格以便查找?在我的主要制作形式中,将会有组合框选取组件。
  4. 如何在此场景中存储物品转化率?

任何意见,更正或甚至整个作出了赞赏。非常感谢你

回答

0

对于每个项目你将有很多空列。在Items变化不大的某些情况下,这不被称为不良设计。

,如果你的项目是具有比任何使用父子关系或最好的办法太多不同的属性,我建议是使用Entity–attribute–value model

这种模式将有较少的列,但更多的行。检查此模型是否适用于您的问题。