0

有人可以确保我的数据库处于第三范式,如果不是,请解释为什么不?我需要数据库只有 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.
4

2 回答 2

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领域?

于 2013-02-09T09:36:43.607 回答
0

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

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

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

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

于 2013-02-09T10:27:56.817 回答