![]() |
1
1
您希望使您的数据库模式尽可能接近“真实世界”。因此,在本例中,由于交付类型和帐单条款与单个客户关联,而不是与计划关联,因此您可以将它们包含在customers表中。 我不知道你为什么要考虑将类型和术语放入计划记录中,但是你说“这种方法简单得多”。你能详细说明一下你的意思吗?对我来说,这似乎更让人困惑。原因如下: 假设您为客户提供了五种不同的计划,那么相应地,您的计划表中就有五种计划。当您要创建任何类型的数据输入屏幕时,您只需从数据库中调出您的计划选项并显示它们。如果以后您决定添加一个新的计划,您可以将它添加到数据库中,如果您的视图代码编写正确,它就可以正常工作。 但是,如果要在计划表中包含所有排列,则不能使用此方法,必须在演示屏幕上对计划进行硬编码,然后在添加新计划时对其进行修改。 另外,如果将术语和类型与计划分开,则可以创建过程来修改客户,而不必修改客户对计划的选择。这自然是正确的做法,因为在这种情况下,客户没有修改他们的计划选择。 希望这有意义。 |
![]() |
2
1
每个属性的函数依赖关系是什么?
如果不管计划如何,每个客户都可以有不同的帐单期限,那么帐单期限取决于客户,并且应该是客户表的一个属性。 但是,如果每个计划都有一个默认的计费期限,但可以逐个客户覆盖它,那么有两个选择:
每一个都有权衡;这就是为什么它是设计而不是工程。 |
![]() |
3
1
计划和客户是不同的实体。作为一个客户,我可能想要一个计划给我,另一个计划给我的孩子。
正常化。 |
![]() |
4
1
可能您产生怀疑的原因是您没有在每种情况下确定键和依赖项。一般来说,这样做是个好主意,因为确保您的表至少是BCNF/5th范式,这将立即解决许多设计问题。 |
![]() |
developer · 带外键的SQL表设计 8 月前 |
![]() |
relatively_random · 确保两个表之间一致的共同参考 10 月前 |
![]() |
b126 · 在两种不同的Oracle模式上执行相同查询的速度差异很大 1 年前 |
![]() |
robertspierre · 在多对多关系中自动删除未引用的行 1 年前 |
![]() |
Michael Samuel · MYSQL在以下情况下自动创建索引 7 年前 |