数据库结构

时间:2011-08-08 20:35:49

标签: database-design

我有2张桌子。

表1 =访问(某人进入商店) 表2 = VisitReason(他们为什么进入商店)。

有没有理由为什么表2可以是所有在我的mvc视图中被翻译成复选框的布尔字段?

这可以替代为与访问相关的访问的每个原因创建记录。

思考? (是的我是新人并且正在学习)。

感谢您提出任何意见。

2 个答案:

答案 0 :(得分:2)

  1. 想想未来六个月。如果您需要添加新原因怎么办?你又添加了一列吗?如果该表在那时有8亿行怎么办?重新构建表以添加该列需要很长时间。而如果您按原因添加一行,则可以随时添加新的原因类型。

  2. 想象一下这个问题的答案,“向我展示至少有两个理由进入商店的用户。”也就是说,任何两列都是真的。然后将其扩展到三个原因。

  3. 您将在此 N 列表上创建哪些索引,以加快搜索特定原因的速度。每列一个索引?如果我想了解有两个原因的访客,该怎么办?现在,由于任何两个原因,每个组合都需要一个索引。

  4. 所有布尔字段都有效吗?也就是说,客户访问了但没有任何原因。如果这是无效的,您如何确保至少有一个被检查为真?

答案 1 :(得分:0)

我更希望table2成为每个原因的一条记录。原因列表可能会增长,在我看来应该保存在单独的查找表(表3)中,而不是作为表定义的一部分。随着名单的增长,如果只有一小部分可能的原因适用于任何特定的访问,可能会有一些空间浪费。