授课人:fcq2020/2/19PHP+MySQL开发实战@付嫦情21、数据库设计辅助工具2、编码规范2020/2/19网络程序设计-MicrosoftASP.NET@何文海3数据库设计辅助工具工具模型技术业务模型面向对象分析和设计技术结构化分析和设计技术软件测试技术关系数据库设计技术ErwinPowerDesignerRationalRoseVisioVC++6.0VisualstudioEclipseNetBeans单元测试工具功能测试工具性能测试工具程序流程图DFD时序图状态图CASE工具IDE工具测试工具数据模型类图E-R图在编程的时候会考虑代码的可读性吗?你觉得代码可读性是需要考虑的问题吗?1.代码不仅要自己能读懂,还要别人也能看懂?2.尽量做到可读,但时间紧任务重的时候就顾不上了?3.代码只要自己能读懂就可以了?4.代码写完就完了,不用管以后是否能读懂?5.不知道,没有想过这个问题?2020/2/19网络程序设计-MicrosoftASP.NET@何文海5请记住:尽最大努力把方便留给别人和将来的自己。建议大家遵循本书罗列的常用编程规范!123关系实体和属性E-R图的设计原则E-R图设计的质量直接决定了关系数据库设计的质量。E-R图0,n0,n选修包含学生学号姓名联系方式...班级班级名所属院系教师工号姓名联系方式...课程课程名人数上限课程描述状态...选修成绩选修时间...实体不是某一个具体事物,而是某一种类别所有事物的统称。属性通常用于表示实体的某种特征,也可以使用属性表示实体间关系的特征实体属性属性实体和属性0,n0,n选修包含学生学号姓名联系方式...班级班级名所属院系教师工号姓名联系方式...课程课程名人数上限课程描述状态...选修成绩选修时间...E-R图中的关系用于表示实体间存在的联系,在E-R图中,实体间的关系通常使用一条线段表示。E-R图中实体间的关系是双向的。关系关系关系0,n0,n选修包含学生学号姓名联系方式...班级班级名所属院系教师工号姓名联系方式...课程课程名人数上限课程描述状态...选修成绩选修时间...基数表示一个实体到另一个实体之间关联的数目,基数是针对关系之间的某个方向提出的概念,基数可以是一个取值范围,也可以是某个具体数值基数可选基数强制关系0,n0,n选修包含学生学号姓名联系方式...班级班级名所属院系教师工号姓名联系方式...课程课程名人数上限课程描述状态...选修成绩选修时间...元表示关系所关联的实体个数。二元关系二元关系夫妻人身份证号姓名性别...一元关系关系0,n0,n选修包含学生学号姓名联系方式...班级班级名所属院系教师工号姓名联系方式...课程课程名人数上限课程描述状态...选修成绩选修时间...使用关联(Association)表示实体间关系的属性。关联0,10,1人身份证号姓名性别...夫妻登记时间关联关系123实体是一个单独的个体,不能存在于另一个实体中,成为另一个实体的属性。属性应该存在于、且只存在于某一个地方(实体或者关联)。同一个实体在同一个E-R图内,仅出现一次。数据库开发人员通常采用“一事一地”的原则从系统的功能描述中抽象出来E-R图。E-R图的设计原则1.为E-R图中的每个实体建立一张表。2.为每张表定义一个主键(如果需要,可以向表添加一个没有实际意义的字段作为该表的主键)3.增加外键表示一对多关系。4.建立新表表示多对多关系。5.为字段选择合适的数据类型。6.定义约束条件(如果需要)。7.评价关系的质量,并进行必要的改进。关系数据库设计student(student_no,student_name,student_contact)course(course_name,up_limit,description,status)teacher(teacher_no,teacher_name,teacher_contact)classes(class_name,department_name)0,n0,nchooseincludeclassesclass_namedepartment_namestudentstudent_nostudent_namestudent_contact...teacherteacher_noteacher_nameteacher_contact...coursecourse_nameup_limitdescriptionstatus...choosescorechoose_time为每个实体建立一张数据库表关键字(key):用以唯一标识表中的每行记录。主键(PrimaryKey):在所有的关键字中选择一个关键字,作为该表的主关键字,简称主键。为每张表定义一个主键主键有以下两个特征:(1)表的主键可以是一个字段,也可以是多个字段的组合(这种情况称为复合主键)。(2)表中主键的值具有唯一性且不能取空值(NULL);当表中的主键由多个字段构成时,每个字段的值都不能取NULL。主键设计技巧,请参看本书内容。为每张表定义一个主键student(student_no,student_name,student_contact)course(course_no,course_name,up_limit,description,status)teacher(teacher_no,teacher_name,teacher_contact)classes(class_no,class_name,department_name)0,n0,nchooseincludeclassesclass_namedepartment_namestudentstudent_nostudent_namestudent_contact...teacherteacher_noteacher_nameteacher_contact...coursecourse_nameup_limitdescriptionstatus...choosescorechoose_time为每张表定义一个主键外键(ForeignKey):如果表A中的一个字段a对应于表B的主键b,则字段a称为表A的外键,此时存储在表A中字段a的值,要么是NULL,要么是来自于表B主键b的值。增加外键表示一对多关系情形一:如果实体间的关系为一对多关系,则需要将“一”端实体的主键放到“多”端实体中,然后作为“多”端实体的外键,通过该外键即可表示实体间的一对多关系。增加外键表示一对多关系class_noclass_namedepartment_name12012自动化1班机电工程22012自动化2班机电工程student_nostudent_namestudent_contactclass_no2012001张三1500000000012012002李四1600000000012012003王五17000000000NULL2012004马六1800000000022012005田七190000000002referencereferencereferencereference这里的NULL表示不确定或不存在学生student表班级classes表让学生记住所在班级,远比班级“记住”所有学生容易的多。增加外键表示一对多关系情形二:实体间的一对一关系,可以看成一种特殊的一对多关系:将“一”端实体的主键放到另“一”端的实体中,并作为另“一”端的实体的外键,然后将外键定义为唯一性约束(UniqueConstraint)。增加外键表示一对多关系course_nocourse_nameup_limitdescriptionstatus1java语言程序设计60暂无已审核2MySQL数据库150暂无已审核3c语言程序设计60暂无已审核teacher_noteacher_nameteacher_contactcourse_no001张老师110000000001002李老师120000000002003王老师130000000003referencereferencereference为保证课程与教师之间的1:1关系,需要在course_id字段处定义唯一性约束,保证course_id的字段值不重复课程course表教师teacher表course_nocourse_nameup_limitdescriptionstatusteacher_no1java语言程序设计60暂无已审核0012MySQL数据库150暂无已审核0023c语言程序设计60暂无已审核003teacher_noteacher_nameteacher_contact001张老师11000000000002李老师12000000000003王老师13000000000referencereferencereference为保证课程与教师之间的1:1关系,需要在teacher_no字段处定义唯一性约束,保证teacher_no的字段值不重复课程course表教师teacher表PK增加外键表示一对多关系PK后的方案:student(student_no,student_name,student_contact,class_no)course(course_no,course_name,up_limit,description,status,teacher_no)teacher(teacher_no,teacher_name,teacher_contact)classes(class_no,class_name,department_name)增加外键表示一对多关系情形三:如果两个实体间的关系为多对多关系,则需要添加新表表示该多对多关系,然后将该关系涉及到的实体的“主键”分别放入到新表中(作为新表的外键),并将关系自身的属性放入到新表中作为新表的字段。建立新表表示多对多关系teacher(teacher_no,teacher_name,teacher_contact)classes(class_no,class_name,department_name)course(course_no,course_name,up_limit,description,status,teacher_no)student(student_no,student_name,student_contact,class_no)choose(choose_no,student_no,course_no,score,choose_time)建立新表表示多对多关系referencereferencereferencereferenceteacher表teacher_noteacher_nameteacher_contactchoose表choose_nostudent_nocourse_noscorechoose_timestudent表student_nostudent_namestudent_contactclass_noclasses表class_noclass_namedepartment_namecourse表course_nocourse_nameup_limitdescriptionstatusteacher_no建立新表表示多对多关系MySQL数据类型日期类型数值类型整数类型小数类型精确小数类型浮点数类型字符串类型变长字符串类型varchar或者textchar定长字符串类型为字段选择合适的数据类型为字段选择合适的数据类型手机号码13000000000用什么数据类型?学号2012001用什么数据类型?2016-11-08用什么数据类型?常用的约束条件有6种:主键(PrimaryKey)约束外键(ForeignKey)约束唯一性(Unique)约束默认值(Default)约束非空(NotNULL)约束检查(Check)约束。class_nostudent_nocourse_no父子teacher表classes表course表student表choose表teach