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));
      
      
    记录学习的点点滴滴
  • 相关阅读:
    诸神之眼-Nmap(精版,更新中。。。)
    workerman-chat聊天室
    Mysql记录事本
    网站标题、描述、关键词怎么设置?
    什么是谷歌SEO?
    图片加载之性能优化
    前端实现图片懒加载(lazyload)的两种方式
    HTML`CSS_网站页面不同浏览器兼容性问题解决
    从输入url到显示页面,都经历了什么
    什么是mvvm mvc是什么区别 原理
  • 原文地址:https://www.cnblogs.com/yangzilaing/p/14542400.html
Copyright © 2011-2022 走看看