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));
      
      
    记录学习的点点滴滴
  • 相关阅读:
    py二级习题
    js 闪烁的文字
    用windows 画图 裁剪照片
    JS 练习
    弧度制与角度制
    Knockout.Js官网学习(event绑定、submit绑定)
    js中进行金额计算 parseFloat 会产生精度问题,toFixed(2) 方法修正
    JQuery通过类选择器捕获click事件获取bai当前点击对象的id, javascript中onclick(this)用法介绍
    jQuery检查元素是否含有指定的class类,使用.hasClass()方法
    ajax的dataType有哪些类型?
  • 原文地址:https://www.cnblogs.com/yangzilaing/p/14542400.html
Copyright © 2011-2022 走看看