数据库设计
为什么我们创建数据库需要提前进行设计?
战斗机
凭借人经验和记忆我们能够完成一些简单的制作,但是目标达到一定的难度的时候,光是一个人凭经验或直觉是很难去准确的完成的,所以我需要提前进行设计。
数据模型也是一样的,当你想给自己或别人开发一套企业网站,这种比较简单的网站我们往往可以凭借个人经验设计数据模型,但是如果让你去开发一套电子商务网站(京东、当当等...)或者大型的ERP系统、OA系统由于业务过于庞大,实际需求并不确定,所以我们需要设计。
模型设计参考步骤:
收集信息,与该系统有关人员进行交流、座谈,充分了解用户需求,理解数据库需要完成的任务,标识实体 ,标识数据库要管理的关键对象或实体,实体一般是名词,标识每个实体的属性,标识实体之间的关系。
表(实体):矩形表示,一般是名词。
字段(属):用椭圆形表示,一般是名词。
关系(外键):用形表示,一般是动词。
数据库的映射关系有四:
一对一关系:举例,在线超市管理系统中,客户(用户)信息和会员信息的关系。或者学校管理系统中学生和学籍的关系。
一对多关系:举例,学校管理系统中,班级和学生的关系。超市管理系统中商品类型和商品的关系。
多对一关系:举例,一对多把角色调换就是多对一。
多对多关系:举例,超市管理系统中客户和产品的关系通常中间是通过订单来进行关联。
所以客户和产品的关系是多对多关系,那么在数据库中的具体实现是就添加了中间表 - 订单信息表完成。
数据库三大范式:
除了解关系的对于,另外为了数据的规范我们还需要了解设计范式,为什么要学习数据库三大范式?通常不合规范的表设计缺陷:信息重复、更新异常、插入异常、无法正确表示信息、删除异常、丢失有效信息。
第一范式的目标是确保每的原子性
如果每列都是不可再分的最小数据单元(也称为最小的原子单元)。
举例:中国湖北省武汉市,思考拆分,国家 省份 城市分割,否则数据冗余就会出现,且数据筛选变的不灵活。
第二范式要求每个表只描述一件事情
举例:酒店管理系统的客户表不能出现例如,房间信息甚至房间状态,如果需要表示信息应该通过引用完整性来关联。
第三范式是在满足第二范式的前提下,并且除了主键以外的其他列都不传递依赖于主键列。
举例:酒店管理系统,房间表内出现了房间价格。试想一下,每个人去酒店预订房间,房间的价格是由具体的房间决定?还是有房间类型?很显然我们会告诉对方标准间多少钱,或者总统套房多少钱。那么由此可见价格对于房间类型是直接相关,而对于房间信息是间接相关。
【结语】
相信大家对据库模型设计的概念不难明白,但是真的需要灵活运用还是需要大家如尝试和论证。希望本篇文章能够与大家共勉。如果小伙伴儿们关注,后续再继续和大家有更多的交流!欢迎关注公众号,欢迎讨论,欢迎转发,愿天下有需求的人都能看到!
有疑问可以点击下方的“了解更多”,进入在线视频链接进行学习。好了感谢大家的观看再见!