数据库第3范式

时间:2013-02-09 08:49:45

标签: database forms normalization third-normal-form

有人可以确保我的数据库处于第3范式,如果没有,请解释原因为何? 我需要DB只有3个表。所以这就是:

Customer No. (PK)     Store No. (PK)     Sale No. (PK)
Name                  Location           Customer No. (FK)
Telephone             Revenue            Store No. (FK)
Address                                  Total
Purchases($)                             Paid
Store No.

2 个答案:

答案 0 :(得分:0)

以下是您的三个表格:表1:客户

Customer No. (PK)
Name
Telephone
Address

然后表2:商店

Store no. (PK)
Location

然后表3:销售

Sale No. (PK)
Customer No (FK)
Store No (FK)
Total
Paid_yes_no

如果您尝试通过Paid列跟踪部分付款等,那么它将是一个单独的表(以及更复杂的数据库)。但是,如果您的Paid列只是表明该帐单是否已付款,则上述情况应该有效。

也许你还需要一个Date字段?

答案 1 :(得分:0)

存在一些问题,其中一些可能是因为规范是针对家庭作业而不是现实世界。

    客户中的
  • Store No.是一个重复的列有理由期望拥有多个商店的企业拥有使用多个商店的客户 - 除非您的规范另有说明,并且在这种情况下应该扩展分类(命名),可以考虑 First Store No。 Home Store No.。。如果要保留,也应将其标记为外键。
  • customers表中的
  • Purchases($)依赖于其他会改变的数据。由于它来自其他信息,因此您不应存储它。
  • Address不是一列 - 它有多个部分,如街道,城市,州,国家和地区。邮政编码可能需要额外的表格详细信息才能完全满足第二范式。同样地,Telephone不一定只是一个数字。

您需要知道的每件事都应该只出现一次。如果你可以从别的东西计算它,你应该这样做,而不是存储答案。在现实世界中,您有时可能会将某些信息缓存在表格中或批处理它以提高性能,但这些信息将在以后应用,并且仅在必要时才会应用。

数据库规范化的简要概述位于http://databases.about.com/od/specificproducts/a/normalization.htm,您可能需要在重新处理项目之前查看。