Database design 数据库设计:表还是列?

Database design 数据库设计:表还是列?,database-design,Database Design,2个快速问题: 我已经尽了最大的努力来学习规范化表单,但是对于这种特定情况我并不确定 我有一件事 一个事件有许多实例 实例有:食物、人员、成本、评估、位置等 食物、人员、成本等应该各自有自己的表还是只是实例表中的列(BLOB)?我没有理由认为它们每个都需要一个完整的表,因为它们只属于一个实例,不会被共享。然而,我不知道未来是否会给我理由让他们成为他们自己的人,所以还是把他们当作自己的人来对待好吗 其次,如果所有这些都应该是它们自己的表,那么也存储事件外键是否有用?如果我想调用某个事件的每个食物列

2个快速问题:

我已经尽了最大的努力来学习规范化表单,但是对于这种特定情况我并不确定

  • 我有一件事
  • 一个事件有许多实例
  • 实例有:食物、人员、成本、评估、位置等
  • 食物、人员、成本等应该各自有自己的表还是只是实例表中的列(BLOB)?我没有理由认为它们每个都需要一个完整的表,因为它们只属于一个实例,不会被共享。然而,我不知道未来是否会给我理由让他们成为他们自己的人,所以还是把他们当作自己的人来对待好吗


    其次,如果所有这些都应该是它们自己的表,那么也存储事件外键是否有用?如果我想调用某个事件的每个食物列表,而不考虑实例,或者我只是从一个事件中获取所有实例,然后调用每个实例的信息。如果我预计会发生这种情况,那么这是否足以让我添加关键点,或者这是一个糟糕的计划呢?

    在你走下这条路并后悔以后的决定之前,不妨现在就计划一下未来。最好将实例项(食物、人员、成本等)存储在单独的表中。Instance->Instance项是一个多对多关系,您需要在对象表之间建立一些链接表来允许这种多对多关系

    Event | EventID
    Instance | InstanceID, EventID
    InstanceFood | InstanceID, FoodID
    InstancePerson | InstanceID, PersonID
    ...
    Food | FoodID, FoodName
    Person | PersonID, PersonName
    

    对于链接表,primaryKey是InstanceID和其他id值的组合。使用此设置,无需在对象(食物、人)表中存储事件ID。如果您想知道某个特定的人与哪些事件相关,只需将person与Instance person和Instance结合起来,即可获得所有相关的EventID。

    在您开始之前,不妨在此时此地规划未来,稍后再后悔您的决定。最好将实例项(食物、人员、成本等)存储在单独的表中。Instance->Instance项是一个多对多关系,您需要在对象表之间建立一些链接表来允许这种多对多关系

    Event | EventID
    Instance | InstanceID, EventID
    InstanceFood | InstanceID, FoodID
    InstancePerson | InstanceID, PersonID
    ...
    Food | FoodID, FoodName
    Person | PersonID, PersonName
    

    对于链接表,primaryKey是InstanceID和其他id值的组合。使用此设置,无需在对象(食物、人)表中存储事件ID。如果您想找出特定人员与哪些事件关联,只需将人员与实例人员和实例关联起来,即可获得所有关联的事件ID。

    您的模型未指定。
    事件
    “有”成本是什么意思?它是以美分表示的一个总数吗?属于数值
    成本
    列的。它是几种收费产品或服务的分项说明吗?然后它必须进入一个单独的表中,因为这是实现1:n关系的唯一合理方法。同样地,
    评估
    是1-10分制的单一分数吗?专栏。这是一份包含多个(甚至,上帝保佑,数量可变)问答职位的结构化问卷吗?桌子只是人数重要吗?专栏。相关人员的身份重要吗?桌子


    至于2,如果您有包含1:n数据的关联表,那么实际上没有办法让它们通过外键引用“拥有”记录。例如,如果您确实需要一个表来模拟
    实例
    人员
    之间的1:n关系,那么
    人员
    必须有一个
    实例ID
    列。

    您的模型未指定。
    事件
    “有”成本是什么意思?它是以美分表示的一个总数吗?属于数值
    成本
    列的。它是几种收费产品或服务的分项说明吗?然后它必须进入一个单独的表中,因为这是实现1:n关系的唯一合理方法。同样地,
    评估
    是1-10分制的单一分数吗?专栏。这是一份包含多个(甚至,上帝保佑,数量可变)问答职位的结构化问卷吗?桌子只是人数重要吗?专栏。相关人员的身份重要吗?桌子


    至于2,如果您有包含1:n数据的关联表,那么实际上没有办法让它们通过外键引用“拥有”记录。例如,如果您确实需要一个表来模拟
    实例
    人员
    之间的1:n关系,那么
    人员
    必须有一个
    实例ID
    列。

    谢谢!我想你对桌子的看法是对的,但我只是不确定。但是,我可能仍然会使用一对多,只是因为即使有人使用了某个实例项中的所有信息,我希望它是一个新项(防止覆盖)。这是一个合理的策略吗?@Jdewzy如果person或food类型的单个实体只与instance类型的单个实体关联,那么您也可以安全地删除链接表。只需将InstanceID添加到食物、人表中即可。这对我来说似乎是合理的,但我不敢说这是不是一个好主意,因为我没有像你一样完全意识到整个问题。不,这真的很有用。谢谢谢谢我想你对桌子的看法是对的,但我只是不确定。但是,我可能仍然会使用一对多,只是因为即使有人使用了某个实例项中的所有信息,我希望它是一个新项(防止覆盖)。这是一个合理的策略吗?@Jdewzy如果person或food类型的单个实体只与instance类型的单个实体关联,那么您也可以安全地删除链接表。只需将InstanceID添加到食物、人表中即可。这对我来说似乎是合理的,但我很犹豫说这是否是个好主意,因为我还没有完全意识到这一点