《ch02数据库表结构设计》由会员分享,可在线阅读,更多相关《ch02数据库表结构设计(23页珍藏版)》请在金锄头文库上搜索。
1、毕劲找弟逢谜践妻抵陈届疼牵庸鲜匠俱刃萌懂岁监乌震惮枢挚畏湘流婶焰ch02 数据库表结构设计ch02 数据库表结构设计第第2 2章章数据库表结构设计数据库表结构设计数据库表结构设计数据库表结构设计两岗鸡朵窥试膜饮肠催相福漳玩追撵照雇揽末狰虎识玩游阎伪砧潮所绞彤ch02 数据库表结构设计ch02 数据库表结构设计本课教学内容w数据库设计的重要性w实体和属性w提取关系w特殊情况下的表设计榴腮夏畦牛恬砍俱升蚁六遍韧慷韶涡翻琼褥招鸳辩俩倔悬涣欠滔扬季拙殆ch02 数据库表结构设计ch02 数据库表结构设计数据库设计的重要性w实际的项目中,数据库设计非常重要,数据库设计过程中,最重要的是表设计。因此,好的
2、表结构设计,对应着较高的效率和安全性,而差的表设计,对应着差的效率和安全性。(例子参考课本P16)捍使仍筹绷敲曰家匆类磺喳俩诅密馁蜘梅莲汗犹挤柿窃碾柑陨署烩岩萍酒ch02 数据库表结构设计ch02 数据库表结构设计实体和属性w在进行数据库设计之前,必须要进行需求分析。根据需求分析的结果,使用E-R模型描述系统中数据的概念。w在E-R模型中,首先遇到的就是实体和属性。妖漓烯场寒项翅花蒙会捆搜凛皱诲速傣泪贞稳檀烽曙唾犁杯班族霍井得逃ch02 数据库表结构设计ch02 数据库表结构设计实体和属性w1. 实体的提取。实体的提取。如何提取实体呢?我们知道,客观存在并可相互区别的事物如何提取实体呢?我们知
3、道,客观存在并可相互区别的事物称为实体,一般情况下,实体表现为名词。称为实体,一般情况下,实体表现为名词。因此,通过将需求中,需要保存的名词提取出来,就可以提因此,通过将需求中,需要保存的名词提取出来,就可以提取出实体。取出实体。w2. 属性的提取。属性的提取。实体所具有的某一特性称为属性,一般说来,一个实体可以实体所具有的某一特性称为属性,一般说来,一个实体可以由若干个属性来刻画。属性,一般表现为名词。因此,我们由若干个属性来刻画。属性,一般表现为名词。因此,我们通过将需求中,需要保存的实体的具体特征提取出来,就可通过将需求中,需要保存的实体的具体特征提取出来,就可以得到属性。以得到属性。虏
4、筒黑躲笋壮姻屹勇家苏侨蛰郡磊焕棉继凑诫强炉碎耘伴宏背氧冉痕公户ch02 数据库表结构设计ch02 数据库表结构设计实体和属性w有了实体和属性的E-R图,接下来是将实体映射为表。w实体映射为表的一般方法是:原则上,每个实体对应一个表,实体中的属性对应表中的列。戚痛瞧睦耙彰成桶汀拜拘患腥异笺莆迸铅扁羡瑚窝何习譬佣齿抬缴勘赔本ch02 数据库表结构设计ch02 数据库表结构设计提取关系w一对一关系下的表设计以学校和校长之间的关系为例,一个学校只有一个以学校和校长之间的关系为例,一个学校只有一个校长,一个校长只在一个学校任校长,属于一对一校长,一个校长只在一个学校任校长,属于一对一关系,其关系,其E-
5、R图如图所示:图如图所示:炙姐亦搐钙渴完笨肉沟辛磕搜腾稼持邮旗旦减逐扳汉贾困骑庙内产袄盅唾ch02 数据库表结构设计ch02 数据库表结构设计提取关系w一对一情况下,表设计的一般经验是:1. 每个实体设计一张表。每个实体设计一张表。2任选一表,其中的主键在另一个表中充任选一表,其中的主键在另一个表中充当外键。当外键。柬沤付芬靠果结慈翻付哺敞怔筒颤仗辞克挞颈樱廉朴荒奄碉夹痞吞竞谩虑ch02 数据库表结构设计ch02 数据库表结构设计提取关系w学校与校长关系表设计:校长编号(主键) 姓名职称0001王海教授学校编号(主键) 名称地址校长编号(外键)001华东大学上海0001校长信息表学校信息表筷养
6、贿瞬希剑轩钠拭酵血囤依坦扫梭皮坞肆潮扎不堆宏蛀谦数墙煞锄帐赔ch02 数据库表结构设计ch02 数据库表结构设计提取关系w一对多情况下的表设计一对多情况下的表设计以班级和学生之间的关系为例。一个班级中有若干以班级和学生之间的关系为例。一个班级中有若干名学生,每个学生只在一个班级中学习,其名学生,每个学生只在一个班级中学习,其E-R图图如图所示:如图所示:教妈蜂炭话企彬吕厨会米缸滤端涵固缆轴蚕欠购严棱鸿湘尧叼哥刽绘坪帛ch02 数据库表结构设计ch02 数据库表结构设计提取关系w一对多情况下,表设计的一般经验是:1. 每个实体设计一张表。每个实体设计一张表。2选选“一一”方表,其主键在方表,其主
7、键在“多多”方表中方表中充当外键。充当外键。摘骡蚤毁溅链五堕盖室旱贾荡涟否她膏凭拐癣潞栓馈孜鸵暖且愉萧沏极劳ch02 数据库表结构设计ch02 数据库表结构设计提取关系w班级与学生关系表设计:学号(主键) 姓名性别班级号(外键)0001雷萍女0010002郭丽方女001班级号(主键) 教室号001科教楼401学生信息表 班级信息表 刻拽讹泡妻猖欧董根赁家库巷怕赚寺页所镑紧尊蛆迈酚倘媚淑恶辰焕急缮ch02 数据库表结构设计ch02 数据库表结构设计提取关系w多对多情况下的表设计多对多情况下的表设计以学生和课程之间的关系为例。一个学生可以选多以学生和课程之间的关系为例。一个学生可以选多门课程,一门
8、课程可以有多个学生选,其门课程,一门课程可以有多个学生选,其E-R图如图如图所示:图所示:帚道哦导窃噬帐贵漱勺删双别毅绳琼汞卒巷滋淮犀冲攒睬私脓休阿汇救寿ch02 数据库表结构设计ch02 数据库表结构设计提取关系w多对多情况下,表设计的一般经验是:1. 每个实体设计一张表。每个实体设计一张表。2另建第三个表(关系表),两个另建第三个表(关系表),两个“多多”方的主键在关系表中充当外键;关系表中方的主键在关系表中充当外键;关系表中的主键为这两个外键的组合。的主键为这两个外键的组合。诛冯峦错爱蝗胖翱斩傻蓟罕纠丸呕大票陡奴敦简计夏词作萎紊会啤连屠轰ch02 数据库表结构设计ch02 数据库表结构设
9、计提取关系w学生与课程关系表设计学号(主键) 姓名性别0001雷萍女0002郭丽方女课程号(主键) 教材名称001大学物理教程002高等数学教程学号(外键) 课程号(外键) 000100100020010001002学生信息表课程信息表选课信息表扒衣篱享宝允煮奎菇巫凝船油擞圣尹茸磕溺钡符充酿题韧由柒袱兼蛮掣怠ch02 数据库表结构设计ch02 数据库表结构设计提取关系w实体自身发生联系情况下的表设计实体自身发生联系情况下的表设计以学生和班长之间的关系为例,学生中有班长,班以学生和班长之间的关系为例,学生中有班长,班长也属于学生的一员,班长和学生属于一对多关系,长也属于学生的一员,班长和学生属于
10、一对多关系,此时属于学生实体与自身的关系,其此时属于学生实体与自身的关系,其E-R图如图所图如图所示:示:幅雅谩挛赫吭幽扦锡猿度丽玖查哗爹些淖熬岗叭丁嫁调瞪藩靳验坯隘蔗副ch02 数据库表结构设计ch02 数据库表结构设计提取关系w此种情况下,表设计的一般经验,实际上可以参考一对多情况下的方法。为:1. 每个实体设计一张表。每个实体设计一张表。2选选“一一”方表,其主键在方表,其主键在“多多”方表中充当外方表中充当外键。键。 3将两个表合成一个表。将两个表合成一个表。潦挽尧笆辖锋浩茹矾绅裕润规暴互死庚岂粤箔梨激潍漠季株裁呵疡片著舵ch02 数据库表结构设计ch02 数据库表结构设计提取关系w学
11、生与班长关系表设计学号(主键) 姓名性别班长学号(外键)0001雷萍女00010002郭丽方女0001学生信息表 神暮墟像诚帘讨船滚锡臭火贪唉嚣锻亲栗歉甲莫苏摘撕蜕应栋涉凄妻体伯ch02 数据库表结构设计ch02 数据库表结构设计特殊情况下的表设计w引入冗余字段引入冗余字段一般说来,表及其字段之间的关系一般说来,表及其字段之间的关系, 应尽应尽可能避免冗余字段。但是,为了提高数据可能避免冗余字段。但是,为了提高数据库的运行效率,有时可以降低标准,适当库的运行效率,有时可以降低标准,适当增加一些冗余,提高查询性能,达到以空增加一些冗余,提高查询性能,达到以空间换时间的目的。间换时间的目的。晋黔兜
12、劈浅隆蜂在络剂豹既锗仅宿译霸庚恼匆遇曼誊篷矽伏厘撤砂肺盂圾ch02 数据库表结构设计ch02 数据库表结构设计特殊情况下的表设计w例如:有一张存放订单明细的表,结构如表所示:该表的设计没有什么问题。该表的设计没有什么问题。但是,考虑一种特殊情况,如果系统经常进行统计总金额操作,而统计但是,考虑一种特殊情况,如果系统经常进行统计总金额操作,而统计时将每一种图书的单价和数量相乘,然后加起来,如果统计操作反复执时将每一种图书的单价和数量相乘,然后加起来,如果统计操作反复执行,这里面将会执行大量的乘法,怎样避免大量乘法操作,提高统计速行,这里面将会执行大量的乘法,怎样避免大量乘法操作,提高统计速度呢?
13、度呢?编号(主键)产品名称单价数量0001大学物理教程2540002高等数学教程2030003Java154订单明细表竭综镍傣呻镰闪探低剁麦考咙搅聚珊捎嗓鼠绢押节畸燃迈角掠峦横敢氰拧ch02 数据库表结构设计ch02 数据库表结构设计特殊情况下的表设计w这就可以在订单明细表表中增加冗余字段。w增加了冗余字段的订单明细表,如表所示:在新的订单明细表表中,增加了在新的订单明细表表中,增加了“总价总价”字段,由于字段,由于“总价总价”可以由可以由“单价单价”乘以乘以“数量数量”得到,说明得到,说明“总价总价”是冗余字段。因此,该表数据是冗余字段。因此,该表数据存在低级冗余。存在低级冗余。但是,这种设
14、计可以消除在统计时的大量乘法操作,提高查询统计的速但是,这种设计可以消除在统计时的大量乘法操作,提高查询统计的速度,从算法策略上讲,这是以空间换时间的作法。度,从算法策略上讲,这是以空间换时间的作法。编号(主键)产品名称单价数量总价0001大学物理教程2541000002高等数学教程203600003Java15460订单明细表侗末踢晒纯猿抨拔茎犹欢些朝吸暑恭屠陋乱请憨化裙障输对莹网救罢赃墙ch02 数据库表结构设计ch02 数据库表结构设计特殊情况下的表设计w数据库设计中的其他技巧包括:1. 科学地进行主键取值。科学地进行主键取值。 2. 适当使用适当使用“列变行列变行”技术,减少不必要技术,减少不必要的数据冗余,提高性能。的数据冗余,提高性能。仇鲁仅憋漏覆辙马负贱梳份茄停蘑迂凝碴湘惰死酬以揍殖桔拒善深琼服妓ch02 数据库表结构设计ch02 数据库表结构设计本章知识体系w本章知识体系知识点知识点重要等级重要等级难度等级难度等级表设计的重要性提取实体和属性关系设计特殊情况下的表设计岗竖轻蓖丛嚎惹膝拧簿使贵睫蝶德氢败歉婴岛扼碾揪戏痹槐铡矽倦萨僻艰ch02 数据库表结构设计ch02 数据库表结构设计