mysql 3 –数据库设计、三大范式

数据库设计

为什么需要设计/h3>

当数据库比较复杂的时候,我们就需要设计了。

糟糕的数据库设计:

  • 数据冗余,浪费空间
  • 数据库插入和删除都非常麻烦、(比如外键过多),还可能会产生异常。(一般我们都屏蔽使用物理外键)
  • 程序的性能差

良好的数据库设计:

  • 节省内存空间
  • 保证数据库的完整性
  • 方便我们开发系统

具体设计

软件开发中,关于数据库的设计

  • 分析需求:分析业务和需要处理的数据库的需求
  • 概要设计:设计关系图(即E-R图)

步骤(以个人博客 站举例)

  • 收集信息,分析需求

    • 用户表、文章表、评论表等等,各种表。(这一步其实是实体分析,看都有哪些实体。然后总结属性,归成一个表)
  • 标识实体(把需求落地到每个字段)

  • 标识实体之间的关系

    • user -> blog
    • user -> user
    • user -> comment

三大范式

为什么需要数据规范化/h3>
  • 信息重复

  • 更新异常

  • 插入异常

    • 无法正常显示消息
  • 删除异常

    • 丢失有效信息

三大范式

目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。

第一范式(1NF):要求数据库表的每一列都是不可分割的原子数据项。

原子性:保证每一列不可再分

举例说明:

可见,调整后的每一列都是不可再分的,因此满足第一范式(1NF);

第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)

第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。

每张表只描述一件事情 必须满足第一范式

举例说明:

上表中,所有属性都完全依赖于学 ,所以满足第二范式,但是“班主任性别”和“班主任年龄”直接依赖的是“班主任姓名”,

而不是主键“学 ”,所以需做如下调整:

这样以来,就满足了第三范式的要求。

ps:如果把上表中的班主任姓名改成班主任教工 可能更确切,更符合实际情况,不过只要能理解就行。

真正设计的时候需要考虑的 规范性和性能

转存中…(img-j2KMdLRL-1617586593336)]

这样以来,就满足了第三范式的要求。

ps:如果把上表中的班主任姓名改成班主任教工 可能更确切,更符合实际情况,不过只要能理解就行。

真正设计的时候需要考虑的 规范性和性能

image.png

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树使用JDBC操作数据库数据库操作91271 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年3月3日
下一篇 2021年3月3日

相关推荐