【问题标题】:Database normalization of an entity with varied properties具有不同属性的实体的数据库规范化
【发布时间】:2017-10-10 15:59:10
【问题描述】:

在我的应用程序中,我有一个名为actions 的实体表,具有不同的属性。为澄清情况,下表为actions结构:

  1. 身份证,
  2. status_id(非空),
  3. section_id(非空),
  4. job_id(非空)
  5. equipment_id (null),
  6. cause_id (null),
  7. solution_id (null),
  8. created_at,
  9. close_at,
  10. action_type (not null) char(3)

所有以_id 为后缀的字段都是外键,action_type 是非常有限且已定义的操作类型列表,因此我在配置文件中定义了它,即action_type 没有数据库实体。

我的问题比这个更笼统:Can a foreign key be NULL and/or duplicate? 我问的是规范化原则。

在我的情况下,某些操作类型不需要,例如equipment_id,其他需要equipment_id但不需要cause_idsolution_id

在我的数据库设计中,actions 表看起来像多对多共轭表。

上述设计允许轻松获取有关部分和作业的许多统计数据,而无需执行复杂的连接查询。

我的问题是:我的规范化和设计是否正确?

【问题讨论】:

  • “标准化”是什么意思?这个词用来表示很多不同的东西。请解释您要达到的目标以及原因,而不是那个词。如果您指的是它的特定用途,请提供参考。另外,请改写不明确的“某些动作类型不需要,例如设备ID,其他需要设备ID但不需要同时需要原因ID和解决方案ID等”。
  • @philipxy 很好,它就像操作日志表一样工作。该日志将记录有关操作的一些数据,包括其类型、使用的设备、缺陷、原因、解决方案(如果适用)。
  • 你没有回答我的问题。我所说的“解释你想要实现的目标和原因”是指使用“规范化”。

标签: mysql database-design database-normalization


【解决方案1】:

是的,如果这些 _id 不是那么重要,那么在规范化中您可以将它们设置为 null 或删除它们:)

【讨论】:

    【解决方案2】:

    是的。包含 NULL 的外键表示关系是可选的,并且该关系在此实例中不存在。

    在您的情况下,可能存在根本没有相应设备的条目,因此设备 ID 为空。当对引用表进行连接时,外键中为 NULL 的行将简单地丢弃。

    【讨论】:

      猜你喜欢
      • 2017-08-21
      • 1970-01-01
      • 2013-02-09
      • 2011-07-12
      • 2015-09-04
      • 2016-07-22
      • 2011-05-17
      • 2016-04-02
      • 2017-07-08
      相关资源
      最近更新 更多