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:非主键列是直接依赖于主键,还是直接依赖于非主键列

利弊

好处:

  • 避免信息重复、更新异常、插入异常、删除异常、丢失有效的信息

缺点:

  • 规范越高,性能越差,考虑商业化的需求和目标,数据库的性能更加重要
  • 关联查询不得超过三张表,故意添加一些冗余字段,将多表查询变为单表查询
  • 需要平衡规范性和性能
posted @ 2022-04-01 14:29  振袖秋枫问红叶  阅读(40)  评论(0)    收藏  举报