为 table 设计数据库,它可以有多个可选列和依赖项
Designing database for table which can has multiple optional column and dependencies
SO 中的每个人都有美好的一天。
我在为我的项目(孔眼工厂生产模块)设计数据库时遇到问题。作为记录,我在我的项目中使用 MySQL、C# .NET Framework 和 NHibernate。
背景故事
对于我的项目,会有 Item table。项目定义了孔眼生产中包含的所有项目。它可以是原始 Material(卷材、油漆、板材等)、中间产品(目前为冲压产品)和最终产品(组装产品、抛光产品、彩色产品等),可以出售。
所有商品都有 名称、库存, 阈值列,但是SOME项可以有例如,外径 或颜色 列,有些项目没有。 可选列 取决于项目类型(例如线圈只有外径、内径和高度。而油漆只有颜色,而最终产品有所有这些)。 Item 也有多个 Unit (Kg, Pcs, Pack, etc) 可以转换成其他单位。同样,某些项目可能仅关联 Kg 单位,而其他项目可以关联 Kg 和 Pcs 单位(以及它们之间的转换率)。
这就是我的想法。
- 项目
- ID
- ItemType_ID[FK]
- 姓名
- 股票
- 门槛
- 时间戳(创建时间、更新时间、删除时间)
- 已删除
- 维度
- Item_ID[FK]
- 外径
- 内径
- 身高
- 颜色
- Item_ID[FK]
- 颜色
- 物品类型
- ID
- 姓名
- 单位
- ID
- 姓名
Item_Unit 联想table
- Item_ID[PK]
- Unit_ID[PK]
...还没写完,过来求教
我想问的是:
- 这是我的第二个设计,而我的第一个设计把所有可选
Item table 中的列,并在用户未输入时分配 null
该列的值。使用我的第一个设计更好吗?造成它
简化我的代码(Select 只有 1 table)。但是听说数据库里有null值不好?
- 在这种情况下使用继承是否更好?使用父项 table 和子项 table ( Item table 和 Coil table 作为子项) ?
- 对于组装物品、彩色物品、抛光物品,它们有先决条件物品,可以是中间物品或其他最终物品(一些彩色物品可以由中间物品 + 油漆制成,而其他一些彩色物品可以由组装物品+油漆,而组装物品总是由中间物品组成)。如何设计 table 以便于查找?在我的主要生产形式中,会有组合框来选择组件。
- 在这种情况下如何存储项目转化率?
任何建议、更正甚至整个改造都将不胜感激。非常感谢
如果每个项目都有一个 table,您将有很多空列。在 Items
变化不大的某些情况下,这不被称为糟糕的设计。
如果您的项目具有太多不同的属性而不是使用父子关系,我会建议最好的方法是使用 Entity–attribute–value model
此模型的列数较少但行数较多。检查此模型是否适用于您的问题。
SO 中的每个人都有美好的一天。
我在为我的项目(孔眼工厂生产模块)设计数据库时遇到问题。作为记录,我在我的项目中使用 MySQL、C# .NET Framework 和 NHibernate。
背景故事
对于我的项目,会有 Item table。项目定义了孔眼生产中包含的所有项目。它可以是原始 Material(卷材、油漆、板材等)、中间产品(目前为冲压产品)和最终产品(组装产品、抛光产品、彩色产品等),可以出售。
所有商品都有 名称、库存, 阈值列,但是SOME项可以有例如,外径 或颜色 列,有些项目没有。 可选列 取决于项目类型(例如线圈只有外径、内径和高度。而油漆只有颜色,而最终产品有所有这些)。 Item 也有多个 Unit (Kg, Pcs, Pack, etc) 可以转换成其他单位。同样,某些项目可能仅关联 Kg 单位,而其他项目可以关联 Kg 和 Pcs 单位(以及它们之间的转换率)。
这就是我的想法。
- 项目
- ID
- ItemType_ID[FK]
- 姓名
- 股票
- 门槛
- 时间戳(创建时间、更新时间、删除时间)
- 已删除
- 维度
- Item_ID[FK]
- 外径
- 内径
- 身高
- 颜色
- Item_ID[FK]
- 颜色
- 物品类型
- ID
- 姓名
- 单位
- ID
- 姓名
Item_Unit 联想table
- Item_ID[PK]
- Unit_ID[PK]
...还没写完,过来求教
我想问的是:
- 这是我的第二个设计,而我的第一个设计把所有可选 Item table 中的列,并在用户未输入时分配 null 该列的值。使用我的第一个设计更好吗?造成它 简化我的代码(Select 只有 1 table)。但是听说数据库里有null值不好?
- 在这种情况下使用继承是否更好?使用父项 table 和子项 table ( Item table 和 Coil table 作为子项) ?
- 对于组装物品、彩色物品、抛光物品,它们有先决条件物品,可以是中间物品或其他最终物品(一些彩色物品可以由中间物品 + 油漆制成,而其他一些彩色物品可以由组装物品+油漆,而组装物品总是由中间物品组成)。如何设计 table 以便于查找?在我的主要生产形式中,会有组合框来选择组件。
- 在这种情况下如何存储项目转化率?
任何建议、更正甚至整个改造都将不胜感激。非常感谢
如果每个项目都有一个 table,您将有很多空列。在 Items
变化不大的某些情况下,这不被称为糟糕的设计。
如果您的项目具有太多不同的属性而不是使用父子关系,我会建议最好的方法是使用 Entity–attribute–value model
此模型的列数较少但行数较多。检查此模型是否适用于您的问题。