作者bobju (宝贝猪)
看板Database
标题Re: [问题]ERD-场地租借 正规化观念的请教
时间Sun May 17 01:47:55 2009
我来回覆一下, 仅供参考.
这要run过实际的case比较清楚, 完全照教科书讲的做很多地方会觉得
怪怪的.
不过我离开书本已久, 很多东西都是以实务上能run为主, 有没有完全
符合书中的要求就不敢确定了.
※ 引述《Hotpenis5566 (痂骑破麻)》之铭言:
: 附上ERD http://yfrog.com/5dermodel2j
: 字很多....小弟是刚学资料库的 很想把它学好(组员也摆烂=..=)
: 只能靠自己囧
: 很多问题应该都算观念 有请乡民替我解惑
: 我想知道自己哪里对哪里错........感恩.....
: 帮我看我解释的 怕我有观念上的错误 (感恩~^^")
: 其实看书有点不是很懂
: 我试着用自己的想法写出来
: (以下开始):
: 1.在资料库里一开始先画出大概的主架构(ER MODEL)→不明确也没关系
: 2.接着将ERD转换成关联纲目(也就是很多个Table)
: 3.将很多个个关联纲目做第1.2.3正规化
: 正规化完再去修正ERD 使之更明确 →是这样吗= =?
以上同意. 资料关联架构会改的原因除了可能需求分析阶段时有疏漏以外,
还有就是应实际需求而改变, 资料库的设计是为了配合实务需要的.
: 问题:
: 1.a.像关联纲目的定义每一个属性为简单且单值
: 岂不是我们要第一正规化这个步骤是多余的吗= =?
第一正规化除了要去除掉单一属性多值的状况外, 还要去除重复的整笔记录.
例如, 学生资料表当中出现以下状况:
王小明,A111222,男,180cm,72kgw
王小明,A111222,男,180cm,72kgw
以上整笔记录重复两次, 这明显不符合第一正规化, 但是在ERD设计时你无法
预测. 在转为资料表後, 加上条件限制才将这种状况排除掉.
: b.为什麽Relationship不能加主键?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
印象中没听说过这回事. 这是指什麽情况? 是指在画ERD时, 只有Entity才能
设主键的意思?
: 2.a.正规化是只正规实体而已吗? 为什麽不用正规relationship呢?
同样没听说过这回事. relationship转成资料表後, 同样要接受正规化的检验.
: 是不是因为relationship是正规实体的产物呢?
我比较偏向将relationship视为是更高一阶的实体, 用来描述既存实体之间的
关联.
: 譬如:顾客购买商品这一个关联纲目
: 属性有 CustomerID CustomerName TradeID TradeProduct
: 因为CID和TID是关联键
: {CID,TID}→{CNAME}
: 所以拆成两个满足2NF
: +------------+ +------------+
: |Customer |------Relationship---- | Trade |
: +------------+ / \ +------------+
: / \ CID TId / \
: CID CNAME TID TProduct
另外, 以上这张图我不这麽画, 我会画成:
[Customer]-(1,n)-< Trade >---(m,1)---[Product]
/ \ / \ / \ \
CID CNAME CID PID PID Name Price
Quantity,
Amount,
Date
Trade是Customer与Product这两个Entity之间的一种relationship,
不过更进一步地把它视为是建构在Customer与Product上的更高一阶的
Entity会更容易引导思考.
: b 如果一个关联纲目只有一个关联键它一定满足2NF吗?
: (如果不是可以帮我举一个例子吗?)
: 换句话说2NF的定义是不是一个关联纲目里有两个以上关联键
: 并且找到一个非关联键与关联键有意义上的关系(譬如商品编号 和商品名称)
: 此时就把这整个关联纲目拆成两个对吗?
: 因为2NF比较不好理解
: 我再打一个定义上的观念请教一下..
: A,B,C是关联键 找到一个D与ABC是部分函数相依
: 因为C→D (譬如学生学号 对应学生姓名)
: 所以要拆成两个表格{A,B,......}和{C,D......}
: 再去检查{A,B...}这个关联网目里有没有满足2NF这样
: 有点像递回这样= =?
可能名词定义上有点混淆, 你说的"关联键", 意思应该是要说"被选为做主键的
属性组"吧? 当{A,B,C}这组属性被选做当主键时, 其它的属性都必须"完全依附"
於{A,B,C}才行, 这才满足2NF. 如果找到某个属性D, D是依附於C的话, 那麽D对
{A,B,C}就称为"部份依附", 只要发现有"部份依附"的状况, 就不符合2NF. 所以
才需要拆表.
注: 我觉得"相依"翻得不好, 好像是彼此互相依附的意思, 容易引起误会. 所以
我用"依附"代替"相依".
: 3. 第三正规化
: 譬如
: 学生学号 学生姓名 学生系所 学生年级 学生住址 学生的房东 房东电话
: 一个学号对应一个学生住址
: 一个学生住址对应一个房东 所以不满足3NF
: 故需拆成(学号.....住址) 和(住址....电话)
: 这样= ="? 不知道有没有讲错
3NF要排除掉"递移依附"的状况. 以"学生学号"为主键来说, 透过学生学号可以
查到以上任何一个属性. 但是"房东电话"应该也能够透过"学生的房东"查到才对.
意即: 学生学号 -查-> 学生房东 -查-> 房东电话
| ^
+--------------查------------+
这就出现"递移依附"的状况了. 意即"房东电话"依附在"学生房东"上, 而
"学生房东"又依附在"学生学号"上.
最後补充一点: 如果"学生房东"是"候选键"的话, 那麽这样并不违反3NF,
但在这里"学生房东"显然不能当成"候选键"来用, 因此这个例子确实违反3NF.
: 4.(最後一个了)
: 如果一开始的ERD画的够详尽明确 是不是就省下正规化的时间
: 我看我的TABLE实在想不出来可以哪里可以再改进了= =?
: 请好心大大帮我看一下 Orzzzzzzzzzzzzz
嗯..感觉有些是多余的. 我在之前的回文曾经画了一个资料关联图. 或许可以参
考看看. 不过若硬要我划"正统的ERD", 那我大概也画不好. XD
: +-------------------------+
: |学生 |
: +-------------------------+
: | 学号 {主键} | 49635001 张小明 资管 3 091234567
: | 姓名 |
: | 系 所 |
: | 年级 |
: | 电话 |
: +-------------------------+
: +----------------------------+
: | 预定 |
: +----------------------------+
: |学生学号 (外部键) |
: |预定流水号 (外部键) |
: | |
: | |
: | |
: | |
: +----------------------------+
: +-------------------------+
: |预定单 |
: +-------------------------+
: | 预定流水号 (主键} | 1 49635001 A101 20090516 08:00 Null
: | | 20090517 10:00 20090517 12:00 预约中 Null
: | |
: | 申请日期 | 2 49635001 A102 20090516 08:05 Null
: | 取消日期 | 20090518 19:00 20090518 21:00 200
: | 使用开始时间 |
: | 使用结束时间 |
: | 使用状态(预约中,取消) |
: | 晚间开灯费用 |
: | |
: | |
: +-------------------------+
: ~
: +----------------------------+
: |纪录 |
: +----------------------------+
: |预定单流水号 (外部键) |
: |场地编号 (外部键) |
: | |
: | |
: | |
: | |
: +----------------------------+
: +-------------------------+
: |场地 |
: +-------------------------+
: |编号 {主键} | A101篮球场A
: |名称 | A102排球场A
: | |
: | |
: +-------------------------+
: ~
: +-------------------------+
: |优先预定 |
: +-------------------------+
: | 场地编号 (外部键) | A101 00153 20090517 08:00 20090517 10:00
: | 课程编号 (外部键) |
: | 课程开始时间 | //这在学期初就汇入资料库
: | 课程结束时间 | 如果要设定时是不是在程式端设定第一天上课後
: | | 每加七天同一时段不能外借给学生= =?
: +-------------------------+
: ~
: +-------------------------+
: |体育课程 |
: +-------------------------+
: |课程编号 {主键} | 00153
: |课称名称 | 篮球3
: |老师姓名 | 王大同
: | |
: +-------------------------+
: ~
: +-------------------------+
: |设备租借 |
: +-------------------------+
: | | 001 49635001 A1 50 未还
: |学生学号 (外部键) |
: |设备ID (外部键) |
: |借用数量 |
: |借用状态 |
: | |
: +-------------------------+
: +-------------------------+
: |设备 |
: +-------------------------+
: |设备ID {主键} | A1 篮球 150
: |设备名称 |
: |库存数量 |
: | |
: +-------------------------+
: ~~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.104.190.247
1F:推 linmic:推认真 05/20 21:53