精华内容
下载资源
问答
  • 在关系型数据库的设计中,第一范式是对关系模式的基本要求,不满足第一范式的数据库就不是关系数据库。  所谓第一范式是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不...
  • 在社交类系统,用户与用户的好友关系的设计可少,那么如何设计好友的数据库至关重要,本篇文章带大家学习一下相关的设计方案。 基础分析 第一步,有一张用户表,表内包含用户的基本信息,比如账号、姓名...

    在社交类系统中,用户与用户的好友关系的设计必不可少,那么如何设计好友的数据库至关重要,本篇文章带大家学习一下相关的设计方案。

    基础分析

    第一步,有一张用户表,表内包含用户的基本信息,比如账号、姓名、性别等信息。这里用tb_user表示用户信息表。

    ID 用户名
    1 张三
    2 李四
    3 王五
    4 赵六

    第二步,需要将用户与用户直接建立好友关系。这里有两种情况:单向好友关系、互为好友关系。
    - 单向好友关系就是张三在李四的好友列表中,但李四没有在张三的好友列表中;
    - 互为好友关系,如果张三和李四为好友,则双方都在彼此的好友列表中;

    好友关系设计

    无论上面两种关系的哪一种,好友关系表都可以使用下面的设计,表tb_friend:

    ID user_id friend_id
    1 1 2
    2 1 3

    示例中,张三拥有李四和王五两个好友。

    单向好友模式

    如果是单向好友模式,那么两个人互为好友关系则插入的数据应该是这样:

    ID user_id friend_id
    1 1 2
    2 2 1

    也就是张三是李四的好友,李四也是张三的好友。此时使用sql语句查询时只用限定user_id作为条件即可查询出用户的好友列表:

    select * from tb_friend where user_id = 1

    互为好友关系

    因为是互为好友关系,则只需要插入一条数据即可。对应的查询语句为:

    select * from tb_friend where user_id = 1 or friend_id = 1
    

    当然也可以使用UNION ALL来实现:

    select friend_id as friends from tb_friend  where user_id = 1
    UNION ALL --使用UNION ALL,因为不存在重复的
    select user_id as friends from tb_friend where friend_id = 1

    注意事项:
    - user_id1–>friend_id2和user_id2–>friend_id1是相同的记录,不需要重复插入;
    - 为了快速判断两个人是不是好友,可在程序层插入数据前添加一个限制user_id1 < user_id2;
    - 可加入缓存层(Redis或Memcached)来提高性能;
    - 可从数据库层限制(user_id,friend_id)不可重复;

    加入分组

    如果好友数量比较多,关系比较复杂,可引入好友分组,可进行如下改造:

    ID user_id friend_id user_group friend_group
    1 1 2 好友 同学
    2 1 3 同学 同学

    在数据库中添加了user_group,当前user给friend设置的分组,friend_group是当前user的朋友对其设置的分组类别。

    于是,查询好友列表的SQL如下:

    select friend_id as friends ,user_group as my_group from tb_friends where user_id = 1
    
    UNION ALL
    
    select user_id as friends , friend_group as my_group from friend_id = 1

    小结

    至此社交系统中好友关系的设计及SQL语句使用基本完成。可根据具体的业务情况进行修改。在查询除好友的id列表之后就可以进行好友信息的查询。此处需要注意的是如果用in语句来查询会有不走索引、sql语句大小限制、性能等问题,可考虑使用左连接进行查询。

    原文链接:https://www.choupangxia.com/topic/detail/74

    关注微信公众

    更多技术、架构、管理等知识分享,请关注微信公众号:程序新视界(ID:ershixiong_see_world)
    程序新视界

    展开全文
  • 1、第一范式:数据库每一列都是不可分割基本数据项,同一...3、第三范式:要求一个数据库中不包含已在其它表中已包含非主关键字信息 修改后: 4、bcnf:若一个关系达到了第三范式,并且它只有一个...

    1、第一范式:数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值

        

    修改后:

    2、第二范式:要求数据库表中的每个实例或行必须可以被唯一的区分(主键),表中的非主键字段完全依赖于主键字段

    修改后:

    3、第三范式:要求一个数据库表中不包含已在其它表中已包含的非主关键字信息

    修改后:

    4、bcnf:若一个关系达到了第三范式,并且它只有一个候选码,或者它的每个候选码都是单属性

         BCNF是在3NF基础上的改进式,BCNF比3NF更为严格。

         3NF——只消除非主属性对主属性的传递依赖;

          BCNF——消除所有属性对主属性的传递依赖

    5、第四范式:当一个表中的非主属性互相独立时(3NF),这些非主属性不应该有多值

     例如:
    课程代码 老师 教科书
    001         Tom   A
    001         Tom   B
    001          Jim   A
    001          Jim   B
    教科书和老师都是多值属性,所以分出来
    课程-老师(课程代码,老师)
    课程-教科书(课程代码,教科书)

    展开全文
  • 第一范式指导原则:1)数据组每个属性只可以包含一个值2)关系中的每个数组必须包含相同数量值3)关系中的每个数组一定能相同 2、第二范式(2NF)第二范式要求实体属性完全依赖于主关键字,即能存在仅...

    1、第一范式(1NF)
    第一范式是第二三范式的基础,也是最基本的范式,不满足第一范式的数据库就不是关系型数据库。
    第一范式的指导原则:
    1)数据组的每个属性只可以包含一个值
    2)关系中的每个数组必须包含相同数量的值
    3)关系中的每个数组一定不能相同

    2、第二范式(2NF)
    第二范式要求实体的属性完全依赖于主关键字,即不能存在仅依赖主关键字一部分的属性,
    如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系

    3、第三范式(3NF)
    第三范式要求关系表不存在非关键字列对任意候选关键字列的传递函数依赖,也就是说,第三范式要求一个关系表中不包含已在其他表中已包含的非主关键字信息

    转载于:https://www.cnblogs.com/fxust/p/4468050.html

    展开全文
  • (2)参照完整性  参照完整性是对关系数据库中建立关联关系关系间数据参照引用约束,也就是对组成外键属性值 约束。准确地说,参照完整性是指关系中的外键,必须是另一个关系主键有效值

    (1)实体完整性

        实体完整性是对关系中元组的唯一性约束,也就是对组成主键的属性值的约束,即关系(表) 中组成主

    键的属性值不能重复,且不能是空值(NULL)。Null它不等于0,也不等于空字符串,而是未知的值,是不确

    定的值。

    (2)参照完整性

        参照完整性是对关系数据库中建立关联关系的关系间数据参照引用的约束,也就是对组成外键的属性值

    的约束。准确地说,参照完整性是指关系中的外键,必须是另一个关系的主键有效值,或者是NULL(空)

    值。

    (3)用户自定义完整性

        用户自定义完整性约束是用户自行定义的删除约束、更新约束、插入约束。

     

    关系模型的主要特点

    (1)在一个关系中,每一分量不可再分,是最基本的数据单位。

    (2)在一个关系中,每一列的分量是同属性的,列数根据需要而设,且各列的顺序是任意的。

    (3)在一个关系中,每一行由一个实体的诸多属性构成,且各行的顺序可以是任意的。

    (4)一个关系是一张二维表,不允许有相同的属性名,也不允许有相同的元组。

     

    DBMS的主要功能包括数据定义功能、数据操纵功能、数据库的运行管理功能、数据库的建立和维护功能。

    为了实现这些管理和控制的功能,DBMS提供了数据子语言,由以下三个部分组成:

    (1)数据定义语言(Data Definition Language简称DDL) 。

    (2)数据操纵语言(Data Manipulation Language简称DML) 。

    (3)数据控制语言(Data Control Language简称DCL) 。

     

    数据库设计的任务主要就是设计数据库模式。这一数据库模式要能够概括具体的数据库应用系统的数据库

    全局的数据结构,能够反映使用本系统所有用户的数据视图。一个良好的数据库模式应具有最小的数据冗

    余,在一定范围内实现数据共享特性。

        数据库模式一经设计完成,通常情况下是不轻易改动的,它不仅作为应用程序存取数据、处理数据的

    数据结构参照,还要成为实现数据物理存储的数据结构定义的依据。

     

    数据库设计归纳为如下几个阶段:需求分析阶段、概念结构设计阶段、逻辑结构设计阶段、物理结构设计

    阶段、实施阶段、使用与维护阶段。

     

    1.需求分析阶段

        需求分析阶段是数据库设计的基础,是数据库设计的最初阶段。这一阶段要收集大量的支持系统目标

    实现的各类基础数据、用户需求信息和信息处理需求,并加以分析归类和初步规划,确定设计思路。需求

    分析做得好与坏,决定了后续设计的质量和速度,制约数据库应用系统设计的全过程。

     

    2.概念结构设计阶段

        数据库概念结构设计阶段是设计数据库的整体概念结构,也就是把需求分析结果抽象为反映用户需求

    信息和信息处理需求的概念模型。概念模型独立于特定的数据库管理系统,也独立于数据库逻辑模型,还

    独立于计算机和存储介质上数据库物理模型。

     

    3.逻辑结构设计阶段

        数据库逻辑结构设计是在概念模型的基础上进行的,逻辑结构设计,就是根据已设计好的概念模型

    (E-R模型),将其转换为与DBMS支持的数据模型相符的逻辑结构。

     

    4.物理结构设计阶段

        数据库物理结构设计就是为设计好的逻辑数据模型选择最适合的应用环境。换句话说,就是能够在应

    用环境中的物理设备上,由全局逻辑数据模型产生一个能在特定的DBMS上实现的关系数据库模式。

     

    5.实施阶段

        数据库实施阶段是根据物理结构设计阶段的结果,建立一个具体的数据库,将原始数据载入到数据库

    中,并编写应用系统程序,对数据库进行试运行操作。

     

    6.使用与维护阶段

        数据库实施阶段的任务完成后,数据库应用系统将投入使用。为了保证数据库的性能良好,在实际应

    用中,有时也需要对数据库进行调整、修改和扩充。

    展开全文
  • 为了建立冗余较小、结构合理的关系数据库,设计关系数据库时必须遵循一定的规则, 即关系数据库的设计范式。 第一范式(First Normal Form, 1NF) 关系型数据库的第一范式要求: 所有字段都是可分割的 举例来说,...
  • 一、关系数据库设计范式介绍 1.1 第一范式(1NF)无重复列 所谓第一范式(1NF)是指数据库表每一列都是不可分割基本数据项,同一列中不能有多个值,即实体中某个属性不能有多个值或者不能有重复属性。...
  • 数据库的设计范式越高,冗余度就越低,高级别的范式总是包含低级别的范式。数据库设计我们一般至少做到3NF,但是也不是绝对的,有时我们也需要反范式化,引入冗余。 基本概念 1、超键:一组能够唯一标识元组的属性集...
  • 通过将理论融入数据库实践,清晰地讲解了关系数据库的设计原则,完整地展示了如何进行良好的关系型数据库设计,深入揭示了 sql server 2008的技术细节。.  本书浓缩了作者作为 sql server数据库架构师多年来丰富...
  • 关系数据库设计范式介绍 .1 第一范式(1NF)无重复列 所谓第一范式(1NF)是指数据库表每一列都是不可分割基本数据项,同一列中不能有多个值,即实体中某个属性不能有多个值或者不能有重复属性。...
  •  ①、表中的字段可以再分割(即每个字段只包含一个属性值)  ②、表每一行列数相同  ③、表每一行能完成相同(需要唯一表示即主键) 二、第二范式(2NF)  ①、表必须存在某一列能...
  • 为了建立冗余较小、结构合理的关系数据库,设计关系数据库时必须遵循一定的规则, 即关系数据库的设计范式。 第一范式(First Normal Form, 1NF) 关系型数据库的第一范式要求: 所有字段都是可分割的 举例...
  • I、关系数据库设计范式介绍 1.1 第一范式(1NF)无重复列    所谓第一范式(1NF)是指数据库表每一列都是不可分割基本数据项,同一列中不能有多个值,即实体中某个属性不能有多个值或者不能有重复...
  • 关系模式R中的每一个属性对应域值都是可再分 第二范式 2NF (1) 候选键 有的关系中,能够标识元组属性(组)不止一个。此时它们都称为候选键(所有候选键属性数量应该一致) (2) 主属性和非主属性:如果...
  • 我在MySql数据库中有6个表,这些表需要彼此连接(这6个项目必须以任何可能方式关联).我还需要以某种方式向这些关系添加“ sort_order”列.使用“经典ManyToMany”联接表将导致数据库混乱,其中包含数十个联接表.那...
  • 第3范式:妖气一个数据库中不包含已经在其他表中包含非主关键字信息。言外之前就是通过外键建立表之间的关系。 反范式:就是为了业务需要、性能需要做数据冗余即含外键以及该外键同行其他业务字段 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 625
精华内容 250
关键字:

关系数据库的设计中不包含