首页 > 数据库 >数据库基础知识

数据库基础知识

时间:2023-03-31 11:24:24浏览次数:43  
标签:候选 非主 数据库 实体 基础知识 姓名 属性

一、DB/DBSM/DBS

1. 数据库DataBase(DB)

  • 是信息的集合;或是由DBSM管理的数据的集合

2. 数据库管理系统Database Management System(DBSM)

  • 是一种操纵和管理DB的大型软件,通常用于建立、使用、维护DB

3. 数据库系统Data Base System(DBS)

  • 通常由软件、DB和数据管理员组成

 

 

 


二、元组/码/候选码/主码(键)/外码(键)/主属性/非主属性

1. 元组tuple

  • 是关系数据库中的基本概念:

  • 关系是一张表,

  • 表中的每行(即数据库中的每条记录)就是一个元组,在二维表里元组也称为行

  • 每列就是一个属性

2. 码

  • 是唯一能标识实体的属性,对应表中的列

3. 候选码

  • 若关系中的某一属性或属性组的值能唯一标识的一个元组,而其任何子集都不能再标识,则该属性组为候选码

  • 例如:学号、姓名+班级 都属于候选码(可以区分学生实体)

4. 主码/主键

  • 从候选码中选出;一个实体集只能有一个主码,但可有多个候选码

     

  • 不允许重复,不允许为空

5. 外码/外键

  • 如果一个关系中的一个属性,是另外一个关系中的主码,则这个属性为外码

  • 用来和其他表建立联系,可以重复,可以为空值,可以有多个
  • 好处:
    • 保证了数据库数据的一致性和完整性
    • 级联操作方便,减轻程序代码量
  • 不推荐使用原因:
    • 增加复杂性
      • 每次做 DELETE 或者 UPDATE 都必须考虑外键约束,开发复杂, 测试数据不便;
      • 外键的主从关系是定的
    • 增加额外工作
      • 数据库需要增加维护外键的工作,如当做一些涉及外键字段的增,删,更新操作之后,需要触发相关操作去检查,保证数据的的一致性和正确性
    • 对分库分表不友好
      • 分库分表下外键是无法生效的

6. 主属性

  • 候选码中出现过的属性
  • 关系:工人(工号、身份证、姓名、性别、部门、年龄)
  • 候选码:工号、身份证、姓名+部门
  • 主属性:工号、身份证、姓名、部门

7. 非主属性

  • 不包含在任何一个候选码中的属性
  • 如:性别、年龄

 


三、实体联系图Entity Relationship Diagram(ER图)

1. 概念

  • 提供了表示实体类型、属性和联系的方法

2. 要素

  • 实体:现实世界的业务对象 或 逻辑对象,使用矩形框表示;如:学生、老师、课程

  • 属性:某个实体拥有的属性,用来描述组成实体的要素,使用椭圆形表示;如:学号、姓名、课程编号

  • 联系:实体与实体之间的关系,包括业务关联关系、通过数字表示实体之间的数量对照关系

 


 

四、数据库范式

1. 第一范式 1NF

  • 属性不可再分

  • 属性(对应于表中的字段)不能再被分割,即这个字段只能是一个值

  • 是所有关系型数据库的最基本要求,创建的表一定满足

2. 第二范式 2NF

  • 在 1NF 基础上消除了非主属性对码的部分函数依赖
  • 增加了一个列(即主键),非主属性都依赖于主键
  • 函数依赖:

 

 在X值确定的情况下,必能确定Y,那么Y 函数依赖于 X,记作X -> Y

 

  • 部分函数依赖:

(学号,身份证)-> (姓名);(学号)-> (姓名);(身份证)-> (姓名)

 则 姓名 部分依赖于 学号+身份证

3. 第三范式 3NF

  • 在 2NF 基础上消除了非主属性对于码的传递函数依赖

  • 基本上解决了数据冗余过大、插入异常、修改异常、删除异常的问题

  • 传递函数依赖:

(学号,姓名,系名,系主任):学号 -> 系名,系名 -> 系主任

则 系主任 传递函数依赖于 学号

 


 

标签:候选,非主,数据库,实体,基础知识,姓名,属性
From: https://www.cnblogs.com/yy528/p/17275708.html

相关文章

  • 在 MySQL 数据库中删除重复记录的步骤
    在MySQL数据库中删除重复记录的步骤当我们在处理数据库中的数据时,有时候会出现重复记录的情况,这些重复记录会影响数据的正确性,需要将其删除。下面是在MySQL数据库中删除重复记录的步骤:1.查找重复记录首先,我们需要找到数据库表中的重复记录。可以使用以下SQL语句查询表中......
  • 向数据库中写入图片
            ifpose.all_save_image==0:          sql="INSERTINTOstudentmemo.student(idx,pic0)VALUES (%s,%s)"          args=(pose.id,crop)          cursor.execute(sql,args) ......
  • 为什么说数据库连接很消耗资源
    相信有过工作经验的同学都知道数据库连接是一个比较耗资源的操作。那么资源到底是耗费在哪里呢?本文主要想探究一下连接数据库的细节,尤其是在Web应用中要使用数据库来连接池,以免每次发送一次请求就重新建立一次连接。对于这个问题,答案都是一致的,建立数据库连接很耗时,但是这个耗时......
  • navicat连接云服务器数据库
    centos7拉取mysql报mysqld:Can'treaddirof'/etc/mysql/conf.d/'(Errcode:2-Nosuchfileordirectory)>mysqld:[ERROR]Fatalerrorindefaultshandling.Programaborted!此情况针对于linux云服务器拉取mysql镜像启动容器后dockerps-a查看容器状态为exit(0),容......
  • MySQL数据库面试题
    数据库三大范式是什么第一范式:每个列都不可以再拆分。第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。在设计数据库结构的时候,要尽量遵守三范式,如果不遵守,必须有足够的理......
  • SequoiaDB分布式数据库2023.3月刊
    本月看点速览赋能行业,参编《分布式数据库金融应用发展报告》脱颖而出,入选2022专精特新黑马大赛年度十强激烈角逐,成功晋级全国信创优秀解决方案决赛新穗新彩,多家权威媒体走进巨杉青杉计划2023持续进行,一起攀登更高的“杉”赋能行业,参编《分布式数据库金融应用发......
  • pandas写入数据库
    importpandasaspdfromsqlalchemyimportcreate_engineimportnumpyasnpw=np.array([1,2,3])datas=pd.DataFrame(w)print(datas)engine=create_engine("mysql+pymysql://root:1234567890@localhost:3306/studentmemo?charset=utf8")con=engine.c......
  • Beego查数据库数据panic问题
    一开始没发现问题所在,请了位大佬帮忙排查错误逐步确定问题所在。问题起源于我查数据库没有得到正确的数据开始。一开始发现是数据类型问题,改过之后还是存在问题,于是debug一下,一步一步看问题出在哪里,结果走进了锁,就没仔细看,哪知在这中间出现了一个panic问题。但是这个panic没有打......
  • MySQL数据库怎么创建表?MySQL数据库基础知识
    MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle旗下产品。MySQL最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,关系数据库管理系统)应用软件之一。MySQL是一种关联数据库管理系统,关联数据库......
  • MySQL导入数据库1118错误解决方案[ERR] 1118 - Row size too large (> 8126). Changing
    MySQL导入数据库1118错误解决方案[ERR]1118-Rowsizetoolarge(>8126).ChangingsomecolumnstoTEXTorBLOB编辑sql文件,在开头设置一下innodb_strict_mode为0SE......