首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库第三范式

数据库第三范式
EN

Stack Overflow用户
提问于 2013-02-09 16:49:45
回答 2查看 267关注 0票数 0

有没有人能确保我的数据库是第三范式,如果不是,解释一下为什么不?我需要的DB只有3个表。所以就是这样:

代码语言:javascript
复制
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.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-09 17:36:44

下面是三个表应该是什么:表1:Customer

代码语言:javascript
复制
Customer No. (PK)
Name
Telephone
Address

然后表2:商店

代码语言:javascript
复制
Store no. (PK)
Location

然后表3:销售

代码语言:javascript
复制
Sale No. (PK)
Customer No (FK)
Store No (FK)
Total
Paid_yes_no

如果您试图通过Paid列跟踪部分付款等,那么它将是一个单独的表(以及一个复杂得多的数据库)。但是,如果您的Paid列仅指示账单是否已支付,则上述方法应该有效。

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

票数 0
EN

Stack Overflow用户

发布于 2013-02-09 18:27:57

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

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

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

http://databases.about.com/od/specificproducts/a/normalization.htm上有一个数据库规范化的简要概述,你应该在修改你的项目之前先看一看。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14786434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档