当前位置: 首页 > news >正文

什么网站服务器好wordpress如何添加目录菜单

什么网站服务器好,wordpress如何添加目录菜单,做一个网站APP价格,软件开发用什么软件数据库设计是构建高效、稳定系统的核心环节,而**三范式(3NF)**是关系型数据库设计的经典准则,旨在通过消除数据冗余、避免更新异常,确保数据的完整性和一致性。本教程将通过通俗语言和实例,帮助你快速掌握三…

数据库设计是构建高效、稳定系统的核心环节,而**三范式(3NF)**是关系型数据库设计的经典准则,旨在通过消除数据冗余、避免更新异常,确保数据的完整性和一致性。本教程将通过通俗语言和实例,帮助你快速掌握三范式的核心思想和应用方法。


一、三范式概述

1. 为什么需要范式?

  • 问题场景:假设设计一个学生选课表,包含字段:学生ID、姓名、年龄、课程ID、课程名、成绩

    • 冗余:同一学生选修多门课程时,姓名年龄会重复存储。
    • 更新异常:修改学生年龄需更新多行数据,容易遗漏。
    • 插入异常:新增课程但无学生选修时,无法单独存储课程信息。
    • 删除异常:删除某学生的选课记录时,可能意外删除其个人信息。
  • 范式目标:通过规范化设计,将数据拆分为多个表,减少冗余,避免上述问题。

2. 三范式的层级关系

  • 第一范式(1NF):基础要求,确保数据原子性。
  • 第二范式(2NF):在1NF基础上,消除部分依赖(针对复合主键)。
  • 第三范式(3NF):在2NF基础上,消除传递依赖(非主键字段间无依赖)。

关系图

原始表 → 1NF → 2NF → 3NF

二、第一范式(1NF):确保数据原子性

1. 定义

  • 每个字段的值必须是不可分割的原子值(无重复组、无嵌套结构)。
  • 例如:电话字段不能存储多个号码(如"123-456,789-012"),应拆分为多行或单独表。

2. 反例与修正

  • 反例:订单表包含商品字段,值为"苹果,香蕉"
  • 问题:无法直接查询“购买了苹果的订单”。
  • 修正:拆分为订单ID、商品ID,关联商品表。

3. 操作步骤

  1. 检查所有字段是否为单一值。
  2. 将复合值拆分为多行或关联表。

示例
原始表(不满足1NF):

学生ID姓名选修课程
001张三数学,物理

修正后(满足1NF):

学生ID姓名课程ID课程名
001张三101数学
001张三102物理

三、第二范式(2NF):消除部分依赖

1. 定义

  • 满足1NF,且非主键字段必须完全依赖于整个主键(针对复合主键)。
  • 若主键为单字段,则自动满足2NF。

2. 关键概念

  • 完全依赖:非主键字段的值必须由整个主键决定,而非部分。
  • 部分依赖:非主键字段仅依赖主键的一部分。

3. 反例与修正

  • 场景:学生选课表,主键为(学生ID, 课程ID),包含字段:
    学生ID、姓名、课程ID、课程名、成绩
  • 问题
    • 姓名仅依赖学生ID(部分依赖)。
    • 课程名仅依赖课程ID(部分依赖)。
  • 修正:拆分为三张表:
    • 学生表学生ID、姓名
    • 课程表课程ID、课程名
    • 选课表学生ID、课程ID、成绩

4. 操作步骤

  1. 确认主键是否为复合键。
  2. 找出仅依赖主键部分的字段。
  3. 将这些字段拆分到关联表中。

四、第三范式(3NF):消除传递依赖

1. 定义

  • 满足2NF,且非主键字段之间不能存在依赖关系(即非主键字段必须直接依赖主键)。

2. 关键概念

  • 传递依赖:若A→BB→C,则C传递依赖于A(通过B)。
  • 直接依赖C应直接依赖A,而非通过其他字段。

3. 反例与修正

  • 场景:学生表包含字段:学生ID、姓名、系别、系主任
  • 问题
    • 系主任依赖系别,而系别依赖学生ID
    • 修改系主任时需更新所有该系学生记录,易出错。
  • 修正:拆分为两张表:
    • 学生表学生ID、姓名、系别
    • 系别表系别、系主任

4. 操作步骤

  1. 检查非主键字段间是否存在依赖。
  2. 将传递依赖的字段拆分到新表中。

五、三范式综合应用案例

案例:图书馆管理系统

原始表设计(问题表)
图书ID书名作者出版社出版日期借阅人ID借阅人姓名借阅日期
问题
  1. 冗余:同一作者的多本书会重复存储作者名。
  2. 更新异常:修改作者姓名需更新多行。
  3. 传递依赖借阅人姓名依赖借阅人ID,而借阅人ID依赖图书ID
规范化设计(3NF)
  1. 图书表(满足1NF+2NF+3NF):

    图书ID书名作者ID出版社ID出版日期
  2. 作者表(消除冗余):

    作者ID作者姓名
  3. 出版社表(消除冗余):

    出版社ID出版社名
  4. 借阅记录表(消除传递依赖):

    借阅ID图书ID借阅人ID借阅日期
  5. 借阅人表(独立存储借阅人信息):

    借阅人ID借阅人姓名

六、范式选择的权衡

1. 范式越高越好?

  • 优点:减少冗余、避免更新异常。
  • 缺点:表数量增加,查询需多表关联,可能影响性能。

2. 实际应用建议

  • 一般场景:遵循3NF即可满足需求。
  • 特殊场景
    • 读多写少:可适当反规范化(如合并表)以提升查询速度。
    • 数据仓库:通常采用星型模型或雪花模型,不完全遵循3NF。

七、总结与练习

1. 核心总结

  • 1NF:字段原子性,无重复组。
  • 2NF:消除部分依赖(针对复合主键)。
  • 3NF:消除传递依赖(非主键字段间无依赖)。

2. 练习题

设计一个电商系统的订单表,包含字段:
订单ID、客户ID、客户姓名、商品ID、商品名、单价、数量、总价、下单时间
要求

  1. 指出当前设计的问题。
  2. 将其规范化为3NF,画出表结构。

参考答案

  1. 问题
    • 冗余:客户姓名、商品名重复存储。
    • 传递依赖:总价依赖单价和数量,而单价依赖商品ID。
  2. 3NF设计
    • 订单表:订单ID、客户ID、下单时间
    • 客户表:客户ID、客户姓名
    • 商品表:商品ID、商品名、单价
    • 订单明细表:订单ID、商品ID、数量(总价可通过计算得出,无需存储)。
http://www.dtcms.com/a/516007.html

相关文章:

  • 12、【Ubuntu】【VSCode】VSCode 断联问题分析:getent 命令(二)
  • RHCSA作业2
  • 如何才能提升视频的「听觉质感」
  • 江西省赣州电子商务网站怎么做seo
  • 视频多的网站建设科技设计公司网站模板下载
  • 1.北京三维天地公司-实施实习生
  • c#笔记之事件
  • [RabbitMQ] 最新版本深度解析:4.0+ 新特性、性能飞跃与生产实践(2025 年更新)
  • 2026 AI可见性:构建未来-proof策略的顶级工具
  • 使用子进程实现 C++ 与 Python 交互式控制台
  • 网站建设登录界面代码上海app开发费用
  • 复习下线性代数,使用向量平移拼接两段线
  • 南通网站定制哪家好北京西站附近景点
  • 网站建设大怎么做网页自我介绍
  • 光子精密3D工业相机:赋能国产“2D+3D”精密测量微米级迭代
  • HTTP 三次握手最终状态变更的时机
  • ROS跑ORB-SLAM3遇见的问题总结
  • 晋中路桥建设集团有限公司网站网站开发费用科目
  • kubernetes K8s的监控系统Prometheus 酷炫整体容器监控(三)
  • 记录一次 K8s 环境中 DNS 解析延迟导致 WebClient 请求失败的排查过程
  • 美的网站建设水平swot分析陕西网站建设的目的
  • 安科瑞能源物联网云平台光伏防逆流解决方案
  • Vivado调用FFT IP核进行数据频谱分析
  • 数据结构之顺序表:一款优秀的顺序存储结构
  • 如何将联系人从iPhone转移到iQOO
  • 广州营销型网站成都网站建设app开发
  • 个体户做网站有用吗外链工厂
  • LVDS系列32:Xilinx 7系 ADC LVDS接口参考设计(三)
  • TPS62402DRCR双通道同步降压DC-DC转换器 TI德州仪器 降压转换器 芯片解析
  • 项目实践4—全球证件智能识别系统(Qt客户端开发+FastAPI后端人工智能服务开发)