2026/6/2 4:50:06
网站建设
项目流程
手机版网站开发的功能点,制作个网站多少钱,可以做网站引导页的页面,网页设计网站总结报告怎么写前言#xff1a;表从何而来#xff1f;在进行编程时有这么一个过程:OOA面向对象分析--OOD面向对象分析--OOP面向对象编程#xff0c;而表的设计是针对OOA#xff0c;具体是怎么展开的呢#xff1f;1.从需求中获取类#xff0c;类对应数据库中的实体#xff0c;实…前言表从何而来在进行编程时有这么一个过程:OOA面向对象分析--OOD面向对象分析--OOP面向对象编程而表的设计是针对OOA具体是怎么展开的呢1.从需求中获取类类对应数据库中的实体实体在数据库中表现为一张张表类中的属性对应表中的字段。也就是说类对应数据库中的表2.确定类和类之间的关系3.使用sql来创建具体的表设计表时要遵循一些规则我们称之为3大范式一、认识范式范式有三大规则11NF确保每列具有原子性不可再分22NF在满足1NF的前提下非主键列完全依赖于主键33NF在满足2NF的前提下消除传递依赖相应规则后续有讲解数据库表之间也有三大关系一对一一对多多对多总的来说根据三大范式来创建表根据三大关系来关联表确认关系是建表的前提二、三大范式1NF2NF3NF1.第一范式确保每列具有原子性不可再分怎么理解呢列具有原子性说明列不可以再分了如学校是可分的分为学校名地址学校号码他就不符合第一范式且列中不可以有字符串多个数据。为什么呢CREATE TABLE user_hobby ( id bigint NOT NULL PRIMARY KEY COMMENT ID, name varchar(50) COMMENT 姓名, hobby varchar(100) COMMENT 爱好多个值 ); -- 插入数据 INSERT INTO user_hobby VALUES (1, 张三, 篮球,游泳,看书), (2, 李四, 跑步,画画);如果不规范建表首先如果你在列中使用了字符串爱好有多个值在查询的时候我们还需要拆分字符串这样会导致效率低其次在更新数据时想把 “游泳” 改成 “羽毛球”必须修改整个字段值容易误改其他内容比如把 “篮球游泳” 改成 “篮球羽毛球”少打一个逗号就错了导致更新异常统计麻烦当我想统计有多少篮球时无法直接聚合。2.第二范式核心理解在满足 1NF 的基础上表中的所有非主键字段必须完全依赖于整个主键而不是依赖主键的一部分可以说当不存在复合主键时默认满足第二范式当存在复合主键时也不一定就是不满足第二范式举例说明以下这张表就不符合第二范式首先它存在一个复合主键order_idproduct_id如果说其他字段都完全依赖于该复合主键那么它满足第二范式但是product_name依赖于product_idorder_time依赖于order_id所以它不满足第二范式那么为什么要满足第二范式呢1.数据冗余数据里面有很多个小米手机以及相同的下单时间2.更新异常如果要调整手机名称如小米手机那么就要更改所有的小米手机效率低且可以出现更新不成功的风险。3.、删除异常如我要删除某些订单那么同时会删除商品名这样会导致一段时间内没有商品。3.第三范式官方说明在满足 2NF 的基础上表中的非主键字段不能依赖于其他非主键字段即消除 “传递依赖”。、我们以这个表为例这个表只有一个主键user_id符合1NF2NF但是其中province是依赖于city的而city和province是非主键字段这样 就会导致数据冗余以及复现上面所谈到的问题。这里需要分表实际生产中我们也都是分表然后建立关联来建这种表的如4.三种关联方式一对一一对多多对多三种关联方式都是为了三种范式而服务的在设立表之初我们就要对表中的字段进行分类如课程表和学生表一门课可以被多个人选择一个人可以选择多门课所以这是多对多的关联方式在建立表时按照这种形式进行分表下面我们来举例说明用户表user和用户详情表user_detail一个用户只有一个用户信息一对一如果我们把所有的字段都放在一起去建一个表那么他就不符合1NF更不要提其他两个范式了所以使用关联来解决这个问题。