MySQL04:规范数据库设计
为什么需要设计
当数据库比较复杂的时候,就需要设计了
糟糕的数据库设计
- 数据冗余,浪费空间
- 数据库的插入和删除很麻烦
- 程序的性能差
- 使用物理外键
良好的数据库设计
- 节省内存空间
- 保证数据库的完整性
- 方便系统的开发
设计数据库的步骤(个人博客):
-
收集信息,分析需求
- 用户表(用户登录注销,个人信息,写博客,创建分类)
- 分类表(文章分类,创建者)
- 文章表(文章信息)
- 评论表(评论)
- 关注数(关注数,粉丝数)
- 友情链接(其他链接)
-
标识实体(把需求落实到每个表和字段)
- user(id、username、password、gender、age)
- category(id、category_name、creator_id)
- article(id、title、author_id、category_id、content、create_time、update_time)
- comment(id、blog_id、user-id、content、create_time、user_id_parent)
- user_follow(id、user_id、follow_id)
- links(id、links、href)
-
标识实体之间的关系
- 写博客(user --> blog)
- 创建分类(user --> category)
- 关注(user --> user)
- 评论(user --> user --> blog)
- 友情链接(links)
三大范式
第一范式(1NF)
要求数据表的每一列都是不可分割的原子数据项
具有原子性
第二范式(2NF)
确保数据表的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键)
主键列与非主键列遵循完全函数依赖关系
第三范式(3NF)
确保数据表中的每一列数据都和主键直接相关,而不能间接相关
非主键列之间没有传递函数依赖关系
注:区分第二范式和第三范式
- 2NF:非主键列是否完全依赖于主键,还是依赖于主键的一部分
- 3NF:非主键列是直接依赖于主键,还是直接依赖于非主键列
利弊
好处:
- 避免信息重复、更新异常、插入异常、删除异常、丢失有效的信息
缺点:
- 规范越高,性能越差,考虑商业化的需求和目标,数据库的性能更加重要
- 关联查询不得超过三张表,故意添加一些冗余字段,将多表查询变为单表查询
- 需要平衡规范性和性能

浙公网安备 33010602011771号