数据库设计(三大范式,设计工具)
数据库设计:
1 数据库设计PowerDesigner&三大范式
2 命名风格、主键选择、外键、存储过程
3 数据库事务和数据库锁
4 触发器、游标、视图、自定义函数、
5 字段类型、字段可空、统计字段、逻辑删除
1. 数据库设计的重要性
要谈数据库性能—直接和数据库设计挂钩;
如果不合理-----后续的开发,升级的时候,完全去开不下去;
关系型数据库:存储信息+描述关系;
2. 开发工具
PowerDigner+Microsoft SQL Server Management Studio 18 2012以上;
PowerDesigner工具下载:
链接:https://pan.baidu.com/s/1h2K4iKk0zDWNQUFuUKPbGA
提取码:zx40
3. 设计
-
需求分析,明白需要存储什么
-
大概设计阶段-----E-R图,解决多方沟通问题
-
详细设计----精确到每一个字段
4. 关系
表和表之间的关系
-
一对一:一个—身份证,一夫一妻,数据表垂直切分:相同的主外键
-
一对多:订单—多个商品; 省----市,国家—公民; 主外键来体现
-
多对多:学员----课程,家长—子女 ,用户–菜单 一般情况下:中间表/关系表
5. 数据库三大范式
范式:建议、不是说绝对的要遵循
a. 第一范式:
一范式:每一个列都保持原子性,不可分割;
从表字段的角度来说讲:用户----多个电话:座机、手机号码1、手机号码2
UserInfo-----Detail(JSON格式的字符串----这个用户的所有信息)------查询快—更新慢
从字段的角度来谈单一职责,一个列只存储一个信息—可以来3个字段
优点:更新的时候快,查询也不影响
缺点:部分场景更新成本比较高
b.第二范式:
二范式:在第一范式的基础上,每一列和主键相关; 要求要有主键
Class–班级 一个列存储班级,一个列存储学生
Student —学生,
【不推荐】 都存储一个表,一个字段表示班级,另一个字段表示学员;
推荐使用多个表来存储,学员一个表,班级一个表;主外键的关系来关联;
从每一条记录(对象)的角度来谈单一职责;
c.第三范式:
三范式:每一列的跟主键直接相关,而不是简介相关
公司—用户
CompanyInfo
UserInfo ----UserId,UserName,CompanyInfoId,CompanyName(冗余字段)
冗余字段:查询很便捷(查询到用户就能知道是哪个公司),更新不方便(定时作业,更新时候去维护冗余字段);
在违反这个三大范式的时候回带来方便;主要根据项目的实际情况;
6. 设计工具
1.PowerDesigner
2.Workbench
3.Datablau Data Modeler
PowerDesigner可以直接生成sql语句,也可以从数据库生成一个E-R
7. 设计习惯
a. 命名
尽量做到首字母大写,(帕斯卡命名规范/驼峰规则) 推荐帕斯卡,下划线
坚决抵制:中文,提倡使用英文单词,抵制汉语品拼音
b. 主键
建议大家只是用来做为一个数据的标识,尽量不要让主键具有具体的业务含义;(int/bigint类型)默认带有聚集索引;主键查询效率很高;建议尽量让计算机生成;按照规则生成
自增主键:数据库自动生成,int/bigint,Sqlserver默认聚集索引(最快的),int主键Id一旦生成不能再次修改;
电商系统—订单–订单主键Id—int/bigInt自增Id,用户在查看订单的时候,就可以看到Id,容易泄露一些商业机密;容易让竞争对手获取订单数量;
问题:
-
迁移,主键Id不好维护
-
容易泄露信息
优势:查询性能高,存储占用空间少
c. 联合主键:多个字段组合起来确定数据唯一(不推荐)
d. Guid:全球唯一,插入数据库也可以设置成系统自动升,也可以自己生成;
优势:数据迁移方便;没有聚集索引(查询效率会比较低)
劣势:(查询效率会比较低),存储空间占据也会大一些
e. 外键:描述数据关系+约束
严格约定数据的关系,级联删除,级联更新,导入数据的时候也很麻烦;
建议:如果系统要求严格数据,可以使用外键;
也可以通过程序来约束;虚拟外键;不是通过数据库来完成数据的约束文章来源:https://www.toymoban.com/news/detail-617550.html
合理使用,建议大家不要使用;大型系统架构,数据本来就是性能的第一瓶颈,尽量少让数据库做事儿;文章来源地址https://www.toymoban.com/news/detail-617550.html
到了这里,关于数据库设计(三大范式,设计工具)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!