zoukankan      html  css  js  c++  java
  • 数据库的三大设计范式

    数据库的三大设计范式

    1.第一范式(1NF)

    • 数据表中的所有字段都是不可分割的原子值

      #示例一
      create table student2(
      id int primary key,
      name varchar(20),
      address varchar(30));
      insert into student2 values(1,"张三","中国新疆昌吉玛纳斯");
      insert into student2 values(2,"李四","中国新疆石河子玛纳斯");
      insert into student2 values(3,"王五","中国新疆伊犁新源");
      insert into student2 values(4,"赵六","中国新疆卡拉玛依乌尔禾");
      #输出结果
      +----+------+------------------------+
      | id | name | address                |
      +----+------+------------------------+
      |  1 | 张三 | 中国新疆昌吉玛纳斯     |
      |  2 | 李四 | 中国新疆石河子玛纳斯   |
      |  3 | 王五 | 中国新疆伊犁新源       |
      |  4 | 赵六 | 中国新疆卡拉玛依乌尔禾 |
      +----+------+------------------------+
      #如图所示address中还可以继续拆分所以不满足第一范式
      
      #示例二
      create table student3(
      id int primary key,
      name varchar(20),
      contry varchar(30),
      privence varchar(30),
      city varchar(30),
      distrct varchar(30)
      );
      insert into student3 values(1,"张三","中国","新疆","昌吉","玛纳斯");
      insert into student3 values(2,"李四","中国","新疆","石河子","玛纳斯");
      insert into student3 values(3,"王五","中国","新疆","伊犁","新源");
      insert into student3 values(4,"赵六","中国","新疆","卡拉玛依","乌尔禾");
      #输出结果
      +----+------+--------+----------+----------+---------+
      | id | name | contry | privence | city     | distrct |
      +----+------+--------+----------+----------+---------+
      |  1 | 张三 | 中国   | 新疆     | 昌吉     | 玛纳斯  |
      |  2 | 李四 | 中国   | 新疆     | 石河子   | 玛纳斯  |
      |  3 | 王五 | 中国   | 新疆     | 伊犁     | 新源    |
      |  4 | 赵六 | 中国   | 新疆     | 卡拉玛依 | 乌尔禾  |
      +----+------+--------+----------+----------+---------+
      #最小地址不可再分,所以满足第一范式
      

    2.第二范式(2NF)

    • 在满足第一字段的前提下,第二范式要求,除主键外其他列必须完全依赖与 主键。

    • 如果出现不完全依赖,只可能发生在联合主键的情况下。

      #示例一
      create table myorder(
      product_id int,
      customer_id int,
      product_name varchar(20),
      customer_name varchar(20)),
      primary key(product_id,customer_id));
      ## 问题???
      #除主键外的其他列,只依赖与主键的部分字段(不满足2NF),其实适合联合主键的只要两个加起来不相同就行的特点有关
      #解决——拆表
      
      #示例二
      #对表进行拆分
      create table myorder(
      order_id int primary key,
      product_id int,
      customer_id int);
      
      create table product(
      id int primary key,
      name varchar(20));
      
      create table customer(
      id inr primary key,
      name varchar(20))
      #--分成三个表之后,就满足了第二范式
      
      

    第三范式(3NF)

    • 必须先满足第二范式,除开主键的其他列之间不能有传递依赖关系。

      #示例一(不满足3NF)
      create table myorder(
      order_id int primary key,
      product_id int,
      customer_id int,
      customer_phone int); #严重依赖customer_i又依赖主键d,customer_id
      
      #示例二(可修改为)
      create table customer(
      id int primary key,
      name varchar(20),
      phone varchar(15));
      
      
    记录学习的点点滴滴
  • 相关阅读:
    如何使用Python创建可视化对象
    Power Query中如何解析累积总计
    如何快速复制度量值?
    如何使用文本字段进行条件格式设置
    Power BI 3-4月功能更新培训合集
    2019微软Power BI 每月功能更新系列——Power BI 4月版本功能完整解读
    送你一份堆积柱形图小点心,请收下~
    命令行编译带外部包依赖的java源文件 [以JDBC MySQL8为例]
    JavaScript (JS)常用方法
    JDK8过渡到JDK11
  • 原文地址:https://www.cnblogs.com/yangzilaing/p/14542400.html
Copyright © 2011-2022 走看看