kev
(kev)
高级会员

老会员
UID 27455
精华
1
积分 524
帖子 504
金钱 514 喜悦币
威望 10
人脉 0
阅读权限 50
注册 2004-4-1
状态 离线
|
[原创]关系型数据库设计 -- 带例子详解
作者:Kevin
基于对数据库有一点认识,拿出来和大家分享一下。
因为只是凭记忆写出来,错误在所难免,请大家指正和请勿转贴
例子:一张零售表单,基本内容如下
日期,客户名,客户地址,客户电话,总金额,货物名,数量,单价,此货物总价
设计步骤:
步骤一
1NF - First Normal Form
在这一步中,主要是从上表中把重复的东西分离,另立为一张表。
很明显,“货物名,数量,单价,此货物总价“ 这四个会重复出现的。
如在零售总表中肯定会见到如下的情况
货物名1,数量1,单价1,此货物总价1
货物名2,数量2,单价2,此货物总价2
货物名3,数量3,单价3,此货物总价3
......
对所有的表都要做这样的分离后,再对每个表加上(指定)一个主键(primary key, 简称 pk)后,我们就完成了这一步了。
现在这个例子我们有两张表, 用括号的是外加的, 带星号(*)的是pk。
总表:字段如下
(order_id*), 日期,客户名,客户地址,客户电话,总金额
分离出的表 - 货物表:字段如下
(product_id*), 货物名,数量,单价,此货物总价
步骤二
2NF - Second Normal Form
在这一步中,对每一个表中的字段作分析,主要是两种情况 - 把计算的字段和与pk 无关的字段分离
如在总表中,“客户名,客户地址,客户电话“ 明显就不属于pk - order_id 的,所以要把他们分开。
另外,“总金额“ 和 “此货物总价“ 是通过计算出来的,所以应把他们也从表中删除,但为了方便日后的设计,可以在设计阶段把他们保留。但要在后面加上(计算)以作识别。
****要提醒一点的就是对分离出来的新表要从第一步重新分析,以保证他们符合1NF 的规定***
现在的表如下,共 3 个
总表:字段如下
(order_id*), 日期,总金额(计算)
货物表:字段如下
(product_id*), 货物名,数量,单价,此货物总价(计算)
分离出的表 - 客户表:字段如下
(customer_id*),客户名,客户地址,客户电话
这一步后,我们就可以看到了一个比较清晰的总体了。下一步是 3NF。
过了这个周末看看大家反应如何再说
待续.....
|
|