数据库设计:表格还是列?

时间:2012-05-09 20:20:37

标签: database-design

2个简单问题:

我已尽力了解规范化表格,但对这种具体情况并不确定。

  1. 我有一个活动。
  2. 一个事件有很多实例。
  3. 实例包括:食物,人员,成本,评估,位置等。
  4. 食物,人员,成本等每个都应该获得自己的表格,或者只是实例表(BLOBs)中的列?我没有理由认为他们每个都需要一个完整的表,因为它们只属于 到一个实例,并且不会被共享。但是......我不知道未来是否会让我成为他们自己的理由,所以将它们当作自己的对象更好吗?

    其次, IF 所有这些都应该是他们自己的表,同样存储Event外键也很有用吗?如果我想为事件调用每个Food列表而不管实例,或者我只是从事件中获取所有实例然后调用每个实例的信息。如果我希望这个电话会发生,这是否足以导致添加密钥或者是这个糟糕的计划?

2 个答案:

答案 0 :(得分:2)

在你开始行动之前,不管你今后的决定如何,都要为此做好未来的计划。将您的实例项(食物,人员,成本等)存储在单独的表中可能会更好。实例 - >实例项是多对多的关系,您需要在对象表之间使用一些链接表来允许这种多对多关系。

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

对于链接表,primaryKey是InstanceID和其他id值的组合。使用此设置,无需在对象(食物,人)表中存储事件ID。如果您想确定特定人员与哪些事件相关联,只需加入具有实例人员和实例的人员以获取所有相关的事件ID。

答案 1 :(得分:1)

您的型号未指定。 Event“有”成本是什么意思?它是用Cents表达的单一总计吗?这属于数字COST列。它是几种收费产品或服务的逐项列表吗?然后它必须进入一个单独的表,因为这是实现1:n关系的唯一理智的方式。同样,Evaluation是一个单一的分数,从1-10?柱。它是一个结构化的调查问卷,有几个(甚至是上帝禁止,变量数量的)Q& A职位?表。只有人数重要吗?柱。相关人员的身份重要吗?表

对于2.,如果你有关联的表保存1:n数据,那么实际上没有办法让他们通过外键引用“拥有”记录。例如,如果您确实需要一个表来模拟InstancePeople之间的1:n关系,那么People必须有InstanceId列。