精华内容
下载资源
问答
  • 目前公司内部主流数据库是关系型数据库MySQL,数据库设计是对数据进行组织化和结构化的过程,即关系模型的设计。 对于项目规模小、用户数量少的情况,处理数据库中的表结构相对轻松;目前公司的发展速度快、用户数量...

    数据库关系模型设计

    背景

    目前公司内部主流数据库是关系型数据库MySQL,数据库设计是对数据进行组织化和结构化的过程,即关系模型的设计。
    对于项目规模小、用户数量少的情况,处理数据库中的表结构相对轻松;目前公司的发展速度快、用户数量多、项目规模大、业务逻辑极其复杂;
    相应的数据库架构、关系模型表结构越来越复杂,这时我们往往会发现我们写出来的SQL语句是很笨拙并且效率低下的。更可怕的是,由于表结构定义不合理,会导致对数据的增删改查不方便不高效;最致命的是,扩展性极差,不能应对业务的变化。

    此时对我们开发人员关系模式设计能力要求提高了,我们要学习和掌握数据库的规范化流程,以指导我们更好的设计数据库的表结构,减少冗余的数据,借此可以提高数据库的存储效率,数据完整性和可扩展性。

    简洁、结构明晰的表结构对数据库的设计是相当重要的。规范化的表结构设计,在以后的数据维护中,不会发生插入(insert)、删除(delete)和更新(update)时的异常。反之,数据库表结构设计不合理,不仅会给数据库的使用和维护带来各种各样的问题,而且可能存储了大量不需要的冗余信息,浪费系统资源。

    关于数据库关系模型设计的问题,就是在实际项目中,我们应该构造几个关系模型,每个关系(表)由哪些属性(列)组成,不同关系之间有什么关联。

    规范化

    一个低级范式的关系模型通过模式分解可以转为若干个高一级别范式的关系模型的集合,这个过程就叫规范化。

    为了说明方便,我们用一个订单场景,来一步一步分析规范化的过程

    如下只是为了演示,关系模型规范化的过程,存在不规范的地方

    create table order_info (
        order_no varchar(10) not null comment '订单编号',
        account_name varchar(10) not null comment '会员姓名',
        account_address varchar(10) not null comment '会员地址',
        product_name varchar(10) not null comment '商品',
        product_address varchar(10) not null comment '产地',
        product_num int unsigned not null default 0 comment '数量',
        product_price double not null comment '单价',
        sum_price double not null comment '总价',
        primary key(order_no,account_name,product_name)
    ) engine=innodb default character set=utf8;
    
    order_no account_name account_address product_name product_address product_num product_price sum_price
    201907080001 小明 北京 bose降噪耳机 美国 1 2000 2000
    201907080001 小明 北京 华为p20 中国 1 1000 1000
    201907080002 小刚 上海 bose降噪耳机 美国 1 2000 2000
    201907080003 小明 北京 iphone X 美国 1 2000 2000
    201907080004 小丽 唐山 华为p20 中国 1 1000 1000

    这张表一共有8个字段,分析每个字段都有重复的值出现,也就是说,存在数据冗余问题。这将潜在地造成数据操作(比如删除、更新等操作)时的异常情况,因此,需要进行规范化。

    第一范式

    参照范式的定义,我们发现,这张表已经满足了第一范式的要求。

    事实上在当前所有的关系数据库管理系统(DBMS)中,都已经在建表的时候强制满足第一范式,即关系型数据库原生满足第一范式,1NF是所有关系型数据库的最基本要求。
    从业务的角度分析可能认为这张表不满足第一方式,因为地址可以再细化。

    缺点

    1. 数据冗余:每一个字段都有值重复
    2. 更新复杂:更新用户或商品的地址时需要更新多条记录,即数据的一致性增加了成本

    第二范式

    参照范式的定义,我们发现,这张表不满足第二范式的要求。

    • 存在依赖部分主键
      • (order_no,account_name,product_name) -> account_address
        • (account_name) -> account_address
      • (order_no,account_name,product_name) -> product_price
        • (product_name) -> product_price

    我们按照范式对该关系模式进行分解转化:

    account_info(用户表)

    create table account_info(
        id int unsigned auto_increment comment '主键',
        account_name varchar(10) comment '用户姓名',
        account_address varchar(10) comment '地址',
        primary key(id)
    )engine=innodb default charset=utf8
    id account_name account_address
    1 小明 北京
    2 小刚 上海
    3 小丽 唐山

    product_info(商品表)

    create table product_info(
        id int unsigned auto_increment comment '主键',
        product_name varchar(10) comment '商品名称',
        product_address varchar(10) comment '产址',
        product_price double comment '单价',
        primary key(id)
    )engine=innodb default charset=utf8
    id product_name product_address product_price
    1 bose降噪耳机 美国 2000
    2 华为p20 中国 1000
    3 iphone X 美国 2000

    order_info(订单表)

    create table order_info(
        id int unsigned auto_increment comment '主键',
        order_no varchar(10) comment '订单号',
        account_id int comment '用户id',
        primary key(id)
    )engine=innodb default charset=utf8
    id order_no account_id
    1 201907080001 1
    2 201907080002 2
    3 201907080003 3
    4 201907080004 1

    order_detial_info(订单商品表)

    create table order_detial_info(
        id int unsigned auto_increment comment '主键',
        order_id int comment '订单id',
        product_id int comment '商品id',
        product_num int comment '商品数量',
        sum_price double comment '商品合计',
        primary key(id)
    )engine=innodb default charset=utf8
    id order_id product_id product_num sum_price
    1 1 1 1 2000
    2 1 2 1 1000
    3 2 1 1 2000
    4 3 1 1 2000
    5 4 3 1 1000

    从第一范式到第二范式,一个订单关系表衍生了多个关系表。

    第三范式

    参照范式的定义,我们发现,存在传递依赖
    order_detial_info

    • id -> product_id
    • id -> product_num
    • id -> sum_price
    • (product_id,product_num) -> sum_price

    order_info(订单表)

    create table order_info(
        id int unsigned auto_increment comment '主键',
        order_no varchar(10) comment '订单号',
        account_id int comment '用户id',
        sum_price double comment '商品合计',
        primary key(id)
    )engine=innodb default charset=utf8
    id order_no account_id sum_price
    1 201907080001 1 3000
    2 201907080002 2 2000
    3 201907080003 3 2000
    4 201907080004 1 1000

    order_detial_info(订单商品表)

    create table order_detial_info(
        id int unsigned auto_increment comment '主键',
        order_id int comment '订单id',
        product_id int comment '商品id',
        product_num int comment '商品数量',
        primary key(id)
    )engine=innodb default charset=utf8
    id order_id product_id product_num
    1 1 1 1
    2 1 2 1
    3 2 1 1
    4 3 1 1
    5 4 3 1

    我们通过进一步转换,消除传递依赖,使之满足第三范式。

    总结

    在本文描述的过程中,我们通过结合实例的方法,通俗地演绎了数据表规范化的过程,并展示了在此过程中数据冗余、数据库操作异常等问题是如何得到解决的,但对于订单信息的汇总,报表的形成增加了难度。

    规范化的过程就是,一步步提升关系范式级别的过程;三大范式只是一般设计数据库的基本理念,可是实际工作中我们根据业务场景(OLAP/OLTP)出于性能或扩展的考虑,出发点不一样,在空间和时间上做的取舍不一样,关系模型设计只满足2NF或1NF,也就是反范式;但作为开发人员一定要了解关系模式设计规范化的过程。

    范式

    • 第一范式:当关系模式R的所有属性都不能在分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF(列不可再分,无重复的列);
    • 第二范式:如果关系模式R满足第一范式,并且R得所有非主属性都完全依赖于R的每一个候选关键属性,称R满足- 第二范式,简记为2NF(属性依赖完全主键(主键/所有复合主键),不能依赖主键的一部分,消除部分依赖);
    • 第三范式:设R是一个满足第一范式条件的关系模式,X是R的任意属性集,如果X非传递依赖于R的任意一个候选关键字,称R满足第三范式,简记为3NF(属性不依赖于其他非主属性,消除传递依赖);
    • 数据库范式除了上述三个范式还有BCNF、4NF等,这里不再一一讲解

    知识拓展

    第二范式(2NF)和第三范式(3NF)的概念很容易混淆,区分它们的关键点在于,2NF:非主键列是否完全依赖于主键,还是依赖于主键的一部分;3NF:非主键列是直接依赖于主键,还是直接依赖于非主键列。

    候选码:若关系(表)中某一属性(列)组的值能唯一标识一个元组(行),而其子集不能,则称该属性组为候选码(一个关系中可能存在多个候选码,则选定其中一个作为主码(主键 primary key))。

    候选码的各个属性成为主属性。不包含在任何候选码中的属性成为非主属性非码属性

    最简单的情况下,候选码只包含一个属性;在最极端情况下,关系模式中的所有属性是这个关系模型的属性码,成为全码

    转载于:https://www.cnblogs.com/sunjingwu/p/11213545.html

    展开全文
  • 关系数据库模型设计

    2013-04-25 12:57:12
    关系数据库模型设计
  • 数据库关系模型

    2020-06-13 17:51:07
    数据库模式:数据库的逻辑设计 数据库实例:给定时刻数据库中数据的一个快照 关系:对应于变量 关系模式:对应于类型 关系实例:对应于值 超码:一组属性的集合,可以唯一标识一个元组 候选码:最小超码 主码:选中...

    关系:表
    元组:行
    属性:列
    关系实例:表中所有的行的集合
    域:一个属性的取值的集合
    数据库模式:数据库的逻辑设计
    数据库实例:给定时刻数据库中数据的一个快照
    关系:对应于变量
    关系模式:对应于类型
    关系实例:对应于值
    超码:一组属性的集合,可以唯一标识一个元组
    候选码:最小超码
    主码:选中的候选码
    r1的属性包含r2的主码,则称该属性为r1参照r2的外码,r1为参照关系,r2为被参照关系
    参照完整性约束
    模式图

    展开全文
  • 码 superKey:一个或多个属性的集合...primary key:DB设计者选择的candidate key foreigh key:一个关系模式在它的属性中包含另一个关系模式的主码 三大范式 第一范式(确保每列保持原子性)【属性不可分】 ...

    superKey:一个或多个属性的集合,用来在关系中唯一地标识一个元组

    candidate key:superKey如果任意真子集都不能成为superKey

    primary key:DB设计者选择的candidate key

    foreigh key:一个关系模式在它的属性中包含另一个关系模式的主码

          

     

    三大范式

    第一范式(确保每列保持原子性)【属性不可分】

     

    第二范式(确保表中的每列都和主键相关)【符合第一范式,同时非主属性完全依赖于主键】

     

    第三范式(确保每列都和主键列直接相关,而不是间接相关)【符合2NF,并且消除传递依赖】

    定义:若符合1NF,对于候选键X,非主属性A,不存在X->Y, Y->A的情况

     

    BC范式(BCNF):符合3NF,并且,主属性不依赖于主属性

    定义:若符合1NF,且对于任何X->Y,当Y不属于X时,X一定含有候选键

     

    多值依赖

    对于X给定值,Y有一组值与之对应,且这组Y值不以任何方式与U-X-Y中属性值相联系

     

    4NF

    如果有多值依赖,则一定依赖于候选键

     

    展开全文
  • 数据库——关系模型

    2020-04-29 13:45:38
    码 superKey:一个或多个属性的集合,用来在关系中唯一地标识一个元组 candidate key:...primary key:DB设计者选择的candidate key foreigh key:一个关系模式在它的属性中包含另一个关系模式的主码 ...

    superKey:一个或多个属性的集合,用来在关系中唯一地标识一个元组

    candidate key:superKey如果任意真子集都不能成为superKey

    primary key:DB设计者选择的candidate key

    foreigh key:一个关系模式在它的属性中包含另一个关系模式的主码

    展开全文
  • 数据库设计】逻辑设计-ER模型转换为关系模型

    万次阅读 多人点赞 2017-09-26 16:06:05
    如何把ER模型转换为关系模型这是数据库工程设计进行到逻辑设计的一重大环节,简单的说,如果概念设计是用ER模型, 整合为全局的ER模型,那么在逻辑设计这块, 主要任务就是把ER模型转换为关系模型。转换只需知道三个...
  • 在实体关系模型中,我们知道有三种关系:一对一、一对多、多对多。这只是概念上的关系,但是在真实的关系数据库中,我们只有外键,并没有这三种关系,那么我们就来说一说在关系数据库管理系统中,怎么实现这三种关系...
  • 数据库实体联系模型与关系模型

    千次阅读 2020-03-02 19:11:33
    数据库设计是指根据用户的需求,在某一具体的数据库管理系统上,设计数据库的结构和建立数据库的过程。例如,编程微课是在线编程教育项目,该项目涉及到课程、学生、老师、学习资料等数据,这些数据都要被存储下来,...
  • 掌握概念模型(ER模型和UML模型)到关系模型的转化。 对于ER模型和UML模型不是很熟悉的小伙伴和烦恼于如何设计项目的数据库的小伙伴可以看看本文。 数据库设计(DBD):构造最优的数据模型,建立数据库及其应用系统...
  • 个人重构版机房收费系统中需要自己重新设计数据库,那么如何设计数据库呢?这也是咱们自考中一门重要的课程《数据库原理》,对于考过这科的同学想必已经从中受益,直接就可以学以致用。我是今年10月份考这本书,所以...
  • 逻辑数据库设计:是将概念数据模型转化为逻辑数据模型的过程。最终的数据库必须满足用户对于数据共享、灵活性和易于访问等方面的需求。 关系数据模型 关系数据模型采用表的方式来存储数据。关系数据模型包含三个...
  • 关系数据库关系模型关系数据结构域关系关系模式关系的三类完整性实体元整性(Entity Integrity)参照完整性用户定义的完整性关系代数关系代数运算符传统的集合运算并(Union)差(Difference)交(Intersection)...
  • 关系数据库设计

    2021-01-19 21:53:25
    本文讨论关系数据库设计相关的一些内容,涉及关系模型,表结构设计等内容,以学生选修课程讲述设计过程,在尽量讲清楚设计要领的前提下,简化设计内容。本文基于MySQL数据库为基础,适合有一定关系型数据库基础的人...
  • 最几要做一个数据库数据库,用的是jpa,想通过实体类的映射生成数据库关系表,但是不懂,求大师指导!表噶U你洗图在附件,用户插入一条video数据,我需要在关系表里面也做下关系 如图 [img=...
  • 数据模型数据库设计中用来对现实世界进行抽象的工具,是数据库中用于提供信息表示和操作手段的形式构架。 数据模型是数据库系统的核心和基础。 其实就是一种E-R图的表现形式。 常见的数据模型有层次模型、...
  • 项目数据库设计标准步骤 一、数据需求分析 抽取实体Entity抽取实体Entity 二、确定实体关系CDM(ER模型设计、逻辑模型设计) 原则:找直接关系,不能找间接关系 特点:设计逻辑模型时,不考虑是什么数据库 ...
  • 数据仓库中广泛采用的数据库设计模型有两种:关系型和多维型。普遍认为在数据仓库的设计方法中关系模型是“Inmon”方法而多维模型是“Kimball”方法。先来看下关系模型,关系型数据以一种称为“标准化”的形式存在。...
  • 概念结构设计阶段根据数据库需求说明书,创建数据库概念结构,描述概念结构的有力工具是ER模型。ER模型表示的概念结构模型独立于任何一种数据模型,并独立于任何一个具体的数据库管理系统。因此,需要把概念结构设计...
  • 此处详细记录了现实项目中多对多数据模型列表页面和增删改查页面。...狼奔代码生成器就是读取PowerDesigner设计数据库模型,分析其中的表与表之间的关系模型,分析其中的表和字段的说明信息中的关...
  • 数据仓库中广泛采用的数据库设计模型有两种:关系型和多维型。普遍认为在数据仓库的设计方法中关系模型是“Inmon”方法而多维模型是“Kimball”方法。 先来看下关系模型,关系型数据以一种称为“标准化”的形式存在...
  • 此处详细记录了现实项目中单表的列表页面和增删改查页面。  狼奔代码生成器可以自动生成ASP.NET...狼奔代码生成器就是读取PowerDesigner设计数据库模型,分析其中的表与表之间的关系模型,分析其中的表和字段...
  • 此处详细记录了现实项目中自连接的列表页面和增删改查页面。...狼奔代码生成器就是读取PowerDesigner设计数据库模型,分析其中的表与表之间的关系模型,分析其中的表和字段的说明信息中的关键字,...
  • 关系模型关系是使用最为广泛的逻辑数据模型,如今绝大多数数据库系统都是关系型的,称为 关系数据库。 关系模型涉及关系结构、关系操作和完整性约束三个方面。关系与表关系数据库是使用一系列表来表达数据库以及...
  • 1.概念模型:也称信息模型,它是按用户的观点来对数据和信息建模,主要用于数据库设计。 2.逻辑模型和物理模型 逻辑模型 物理模型 层次模型、网状模型、关系模型、面向对象数据模型、对象关系数据模型、半...
  • 这是数据库工程设计进行到逻辑设计的一重大环节,简单的说,如果概念设计是用ER模型, 整合为全局的ER模型,那么在逻辑设计这块, 主要任务就是把ER模型转换为关系模型。 转换只需知道三个转换准则: 1...
  • 关系型数据库设计是是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关系模型是由埃德加·科德于1970年首先...
  • 提纲:设计过程概览ER模型约束从实体集中删除冗余属性ER图ER模型关系模式的转换ER模型设计问题扩展ER特性建模的其他表示方法数据库设计的其他方面数据库设计的两个缺陷:冗余/不完整 7.2 实体-联系模型实体(Entity...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,905
精华内容 2,362
关键字:

数据库设计关系模型