• 数据库的三大设计范式


    数据库的三大设计范式

    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));
      
      
    记录学习的点点滴滴
  • 相关阅读:
    织梦后台如何安装
    Java JFrame实现无边框无标题
    SharePoint 2013的100个新功能之网站管理(一)
    cvFindContours之轮廓个数
    RequireJS 入门指南
    RESTFUL Service : based on Jersey
    hdu 1548 A strange lift(优先队列)
    SharePoint 用户配置文件服务
    SharePoint Foundation 搜索-PowerShell
    SharePoint 企业搜索-PowerShell
  • 原文地址:https://www.cnblogs.com/yangzilaing/p/14542400.html
Copyright © 2020-2023  润新知