作者bobju (宝贝猪)
看板Database
标题Re: [SQL ] 请问这张表到底是...?
时间Tue Jan 12 10:32:48 2010
※ 引述《g001613001 (月)》之铭言:
: 表基本上涨这样子
: _______________________________________________________________________
: 研习活动代号:a01 研习会名称:SQL基础技能(I) 研习活动天数:3天 |
: _______________________________________________________________________|
: 员工代号| 员工姓名 |_______________________签到日______________________|
: | | 01/01/2009| 01/02/2009 | 01/03/2009|总共缺席次数 |
: ________|__________|___________|____________|____________|_____________|
: A001 小王 X ˇ ˇ 1 |
: A002 小强 ˇ ˇ ˇ 0 |
: A003 小圈 ˇ ˇ ˇ 0 |
: ... |
: A050 小卷 ˇ ˇ ˇ 0 |
: _______________________________________________________________________|
: 研习人数:50人 |
: _______________________________________________________________________|
: 我想问正规化的问题
: 我现在卡在,签到日,它到底是多值属性,还是组合属性?
当做是研习活动的多值属性来看是准没错, 它们的关联是:
研习活动 1 <= n 签到日 , 1场研习活动有n个签到日, 签到日是依附在研习活动
上.
(这里暂且简化讨论问题的范围. 因为实务上, 有可能同一个签到日有好几场
研习活动, 那就是 m-n 的关系.)
: 我个人觉得它是组合属性,由三天的日期以及缺席次数组成的。
要当成是组合属性的话, 你要考虑到如果有好几场不同的研习活动, 而每场
研习活动的签到日的日期及天数各自不同, 那麽你的组合属性将无法维持一致.
: 但是我们老师只交过我们处理多值属性,没交过组合属性怎麽处理。
: 请问如果是组合属性应该怎麽处理?
不管是多值属性或是组合属性, 就是改用一个weak entity包起来处理.
: 我自己判断假设是多值的话,我会处理成如下
: 第一正规化
: 表1 |研习活动代号PK|研习会名称|研习活动天数|总共缺席次数|研习人数|
: 表2 |研习活动代号FK+员工代号=PK|员工姓名|签到日|
: 请问各位前辈 能指点一下迷津吗?
: 两个问题, 我有问题的签到日那里是否是组合属性?是的话怎麽处理?
以下试拟 ER model:
研习活动 1 <= n 签到日 1 <=+ m
+ == 签到记录
员工 1 <===================+ n
研习活动: (研习活动id), 活动名称, etc...
签到日: (研习活动id, 日期), etc...# 这里略过同一个签到日有多场研习活动.
员工: (员工id), 姓名, etc...
签到记录: (研习活动id, 日期, 员工id), 签到时刻, 出缺席状态
以上括弧括起来的代表该主体的主键.
签到记录中的'出缺席状态'是可有可无的, 因为可以从签到时刻来判断.
签到时刻初始值是null, 有签到才有给值. 所以签到时刻是null, 就代表
该员工於该签到日在该场研习活动当中缺席.
至於研习活动天数, 研习人数, 总共缺席次数这三个栏位是可有可无的,
因为它们可以在需要呈现时, 透过SQL query的统计函式取得, 而非必要
的原始资料.
: 以及我假设是多值属性 这样处理对吗?
: 谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 58.115.151.184
1F:推 g001613001:喔喔 谢谢 我在研究一下^^ 01/12 21:27
2F:推 jayfish:推,有经验 01/16 09:06