0

2个快速问题:

我已尽力了解规范化形式,但不确定这种具体情况。

  1. 我有一个事件。
  2. 一个事件有很多实例。
  3. 一个实例有:食物、人、成本、评估、位置等。

食物、人员、成本等应该各自获得自己的表还是只是作为实例表 (BLOB) 中的列?我没有理由认为他们每个人都需要一个完整的表,因为它们属于一个实例,并且不会被共享。然而……我不知道未来是否会给我理由让他们成为他们自己的人,那么把他们当作自己的人会更好吗?

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

4

2 回答 2

2

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

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。

于 2012-05-09T20:33:27.707 回答
1

您的模型未指定。Event“有”成本是什么意思?它是以美分表示的单一总计吗?那属于数字COST列。它是几种收费产品或服务的明细吗?然后它必须进入一个单独的表,因为这是实现 1:n 关系的唯一明智的方法。同样,Evaluation一个分数是从 1 到 10 吗?柱子。它是一个结构化的问卷,有几个(甚至,上帝保佑,数量不定)问答位置?桌子。只有人数重要吗?柱子。相关人员的身份重要吗?桌子。

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

于 2012-05-09T20:37:57.843 回答