数据库设计_SQL数据库设计(数据建模)

数据库设计


为什么我们创建数据库需要提前进行设计?

65642b91c5f71a71a32e4b8baf11cd55.png

纸飞机

c017075eedd4b5c6b6130b94bc50126f.png

飞机图纸

战斗机

凭借人经验和记忆我们能够完成一些简单的制作,但是目标达到一定的难度的时候,光是一个人凭经验或直觉是很难去准确的完成的,所以我需要提前进行设计。

数据模型也是一样的,当你想给自己或别人开发一套企业网站,这种比较简单的网站我们往往可以凭借个人经验设计数据模型,但是如果让你去开发一套电子商务网站(京东、当当等...)或者大型的ERP系统、OA系统由于业务过于庞大,实际需求并不确定,所以我们需要设计。

模型设计参考步骤:

收集信息,与该系统有关人员进行交流、座谈,充分了解用户需求,理解数据库需要完成的任务,标识实体 ,标识数据库要管理的关键对象或实体,实体一般是名词,标识每个实体的属性,标识实体之间的关系。

d4d762e993ff2b7d7b665119ef9e5ce6.png

表(实体):矩形表示,一般是名词。

1ef4c04c39a60fd7227c58426af773bf.png

字段(属):用椭圆形表示,一般是名词。

fc3653537e609f2cfbceb2dbc43b2e9a.png

关系(外键):用形表示,一般是动词。

bdb0be23106280024df044cbe9d791e2.png

数据库的映射关系有四:

一对一关系:举例,在线超市管理系统中,客户(用户)信息和会员信息的关系。或者学校管理系统中学生和学籍的关系。

一对多关系:举例,学校管理系统中,班级和学生的关系。超市管理系统中商品类型和商品的关系。

多对一关系:举例,一对多把角色调换就是多对一。

多对多关系:举例,超市管理系统中客户和产品的关系通常中间是通过订单来进行关联。

所以客户和产品的关系是多对多关系,那么在数据库中的具体实现是就添加了中间表 - 订单信息表完成。

数据库三大范式:

除了解关系的对于,另外为了数据的规范我们还需要了解设计范式,为什么要学习数据库三大范式?通常不合规范的表设计缺陷:信息重复、更新异常、插入异常、无法正确表示信息、删除异常、丢失有效信息。

第一范式的目标是确保每的原子性

如果每列都是不可再分的最小数据单元(也称为最小的原子单元)。

举例:中国湖北省武汉市,思考拆分,国家 省份 城市分割,否则数据冗余就会出现,且数据筛选变的不灵活。

第二范式要求每个表只描述一件事情

举例:酒店管理系统的客户表不能出现例如,房间信息甚至房间状态,如果需要表示信息应该通过引用完整性来关联。

第三范式是在满足第二范式的前提下,并且除了主键以外的其他列都不传递依赖于主键列。

举例:酒店管理系统,房间表内出现了房间价格。试想一下,每个人去酒店预订房间,房间的价格是由具体的房间决定?还是有房间类型?很显然我们会告诉对方标准间多少钱,或者总统套房多少钱。那么由此可见价格对于房间类型是直接相关,而对于房间信息是间接相关。

【结语】

相信大家对据库模型设计的概念不难明白,但是真的需要灵活运用还是需要大家如尝试和论证。希望本篇文章能够与大家共勉。如果小伙伴儿们关注,后续再继续和大家有更多的交流!欢迎关注公众号,欢迎讨论,欢迎转发,愿天下有需求的人都能看到!

有疑问可以点击下方的“了解更多”,进入在线视频链接进行学习。好了感谢大家的观看再见!

DataShow是一款基于.net Framework2.0的Microsoft SQL Server数据库建模工具,工具全部采用C#代码完成。该工具旨在利用自定义表字典的功能来设计强大的数据库控件或者页面,减少开发周期和代码量。 本工具具有如下特点: 1、支持自定义表的种类,将创建的表予以分类。 在创建种类时您可以为种类设置此种表的模板列,在创建该种类的表时,工具会提示您载入模板列,这种设计可以减少同类表多次创建时的工作量。 2、种类包含一个前缀,有利于数据库表的命名规范。 3、创建/编辑表定义时,您可以拷贝、粘贴多个列以减少创建表时的工作量。 4、每个列都包含编辑格式、列宽、显示格式等多种自定义属性,在设计控件时,您可以根据这些属性为不同的字段设计不同的编辑控件。 当然除了以上列举的属性外,还有部分未被设计进本工具的属性,如验证属性、查询属性等。关于这方面的应用请参考本工具的预览功能。 5、编辑格式及预览功能支持您自行扩展的用户控件以进行更高级的设计。 您可以创建一个项目,添加对DataShow.Interfaces.dll的引用,并实现其中的接口,将编译好的DLL添加到[选项]->[插件]的列表中即可在编辑格式或预览时看到您自定义的用户控件。 6、支持对数据库关系的维护。 在创建/编辑表定义时,您都可以打开关系设计界面对关系进行维护。 7、递归式的数据库修改。 当您更改某个受关系影响的列的数据类型、长度、精度、小数位数等信息时,关系中的其他字段将随之更改,这个过程是递归的,所有与该字段有直接或间接关系引用的字段都将受到更改。 8、为更改生成SQL脚本。 使用生成SQL脚本的功能,您可以像使用企业管理器一样为任意修改生成SQL脚本,通过工具内置的SQL执行工具,您可以将更改应用于多台开发机上以保持数据库的一致。 9、与自定义控件结合,使您在做表定义时即时预览到自定义控件的绑定效果。 10、内置有SQL执行工具,该工具是一款简单的查询分析器,目的旨在将您对数据库所做的更改快速布置到其他开发机上。 复杂的SQL语句建议您使用查询分析器完成。 11、表字典生成器让您快速地将本工具使用溶入开发中。 可能您的项目已经着手开发一段时间了,即使是这样,您依然可以让本工具为您效劳。您只需打开表字典生成工具,工具会读取数据库中所有的表及字段信息,根据您的配置生成字典。 12、数据库设计文档生成功能。 文档生成工具将根据您的表定义和字段定义读取字典表中的信息并将这些信息按照您定义的方式生成数据库设计文档。生成方式采用写流方式生成,生成速度快,免去您编写数据库文档的麻烦。 13、备份、还原、收缩数据库功能。 14、表数据预览及编辑功能。 您可以在选项中关闭修改显示的表数据的功能。 15、工具包括多项人性化选项。 16、表定义说明:表工具使用初期,工具会检查您数据库中的是否已经存在Dic_Columns、Dic_Datatypes、Dic_Relation、Dic_RelationDetail、Dic_Sequence、Dic_Tables、Dic_TableTemplate以及Dic_TableType,如果您的数据库中不存在这些表,工具会自行创建。 Dic_Columns:存储字段信息,各个字段的说明请查看表字义。 Dic_Datatypes:存储数据类型信息。 Dic_Relation:存储表关系,各个字段的说明请查看表字义。 Dic_RelationDetail:存储表关系的字段关联信息,各个字段的说明请查看表字义。 Dic_Sequence:用于生成序列号,一般是用于生成主键编号,请勿修改这个表的数据。 Dic_Tables:存储表的字典信息。 Dic_TableTemplate:存储种类的字段模板,各个字段的说明请查看表字义。 Dic_TableType:存储种类信息。 关于作者: 作者:陈鹏伟 联系方式:QQ 89202269 手机:13788892380。 此工具是本人利用业余时间编写数月的成果,转载请保留作者信息。 由于水平有限且没有专门的测试人员做测试= =!BUG在所难免,如果您有任何意见或建议,或者希望索取源码,欢迎与本人联系。 特别鸣谢:张希禄 我的启蒙老师,这个工具的设计来自他关于DataShow的思路。 希望本工具能为您的开发带来方便!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值