|
|
1
1
把它全部放到用户表中是一个不断增长的方法” Ball of Mud “模式。最终,您将得到一个包含300个字段的表——名字、姓氏、地址、工作地址、夏季地址、OwnsaleaseCar、LikeSpizza等等。 我会让他们共享一个用户对象。用户将反映他们所有人的共同点。如果他们使用不同类型的用户(例如,有些人拥有个人信息,有些人拥有完全不同的数据集),那么拥有用户和员工可能是合理的。主要的一点是,我不会试图把不同的类型塞进同一张表中。 编辑- 另外一点是,将不同的数据类型组合在一起会使实现完整性变得不可能——假设将“rentalcaruser”和“employeeuser”组合到同一个表中,并且为rentalcaruser提供字段“doesusherhaveleasecar”。那么,它将是空的,或者对员工有一个无意义的默认值,如果你真的想强制每一个租车用户必须拥有这些信息,你就不能在数据库级别强制执行它(字段!=空),因为您有其他用户不适用该值。为员工添加一个触发器来填写“NA”并没有帮助,因为这样你就有了一大堆“NA”记录,而且你很难判断这是正确的还是丢失的数据。 |
|
|
2
0
我将以模块化的方式设计数据库,使用用户名(如果强制使用唯一性)或用户ID作为引用所有相关信息的键。您将做得更好,并从将信息模块化为多个表中了解更多信息。 |
|
|
3
0
你有三张桌子。
现在你有了超复杂的逻辑。
现在,整件事都是从一个巨大的开关声明中引出的吗? 是的 . 但是通过这样做,您可以使关于用户可以填写哪些表单的逻辑非常复杂:
如果只存储列名来检查空值,就无法执行复杂的逻辑。如果在用户表(如“canFilloutMarriageForm”)中存储单个位,则必须等到更新这些位的作业运行后,用户才能填写MarriageForm。 |
|
|
4
0
似乎您不熟悉数据库规范化,所以我建议您阅读一些相关的教程。这里只有一个例子: http://dev.mysql.com/tech-resources/articles/intro-to-normalization.html 您要从要求您在数据库中建模的纸质表单开始。表单上的每个字段都将成为(未规范化)数据库中的字段。因为您处理的是多个表单,所以可能会有一些共同的字段。这是一个很好的提示,您应该将这些抽象到一个单独的表中。例如,听起来这三个表单都有一个地方让员工写下自己的名字来标识谁在填写表单,所以您需要一个员工表。 从那里开始,只需遵循互联网上众多规范化教程中的一个。第三种正常形态是大多数人所能达到的,但即使第二种正常形态也有所改善。你可能经常会发现你的设计已经是第一个正常的形式了。 |
|
|
developer · 带外键的SQL表设计 1 年前 |
|
|
relatively_random · 确保两个表之间一致的共同参考 1 年前 |
|
|
b126 · 在两种不同的Oracle模式上执行相同查询的速度差异很大 1 年前 |
|
|
robertspierre · 在多对多关系中自动删除未引用的行 2 年前 |
|
|
Michael Samuel · MYSQL在以下情况下自动创建索引 7 年前 |