示例表,用于更清晰解释
学生表(t_student_info)
| StudentID | StudentName | Age | Gender |
|---|---|---|---|
| 101 | 张三 | 18 | 2000 |
| 102 | 李四 | 19 | 1999 |
| 103 | 王五 | 18 | 2000 |
课程表(t_course)
| CourseId | CourseName |
|---|---|
| 101 | 舞蹈 |
| 102 | 钢琴 |
| 103 | 流行乐 |
学生课程表(t_student_course)
| Id | StudentId | CourseId |
|---|---|---|
| 1 | 101 | 101 |
| 2 | 102 | 101 |
| 3 | 103 | 102 |
-
关系型数据库和非关系型数据库核心区别是什么
关系型数据库:采用表格的存储方式,固定数据存储结构
非关系型数据库:采用键值对存储,存储结构不固定,易扩展数据存储方式不同;
数据模式不同:关系型-表格;非关系型-数据集
扩展方式不同:关系型-纵向-提高机器处理能力;非关系型-横向-加节点;
对事务的支持不同:关系型-支持;非关系型-每个数据集都是原子级别,没有这个概念;
查询速度不同:关系型-硬盘-慢;非关系型-内存-快; -
属性(Attribute)、元组(Tuple)的概念
属性:属性是数据库表中的列,它代表表中的每个数据项的特定特征或信息。每个属性都有一个名称,并且对应着某种数据类型,如studentId、studentName等
元组:元组是数据库表中的行,也可以称为记录。每个元组包含了一组属性的值,代表了一个实际的数据项或实体。 例如(1 ,Alice ,Johnson , 20, Female) -
候选码(Candidate Key)、主码(Primary Key)、主属性(Prime Attribute) 的概念
候选码:唯一标识关系中每个元组的一个或一组属性;
主码:主码是从候选码中选择的一个或一组属性,用于唯一标识关系中的每个元组
主属性:主属性是指包含在关系的主码中的属性。 -
外码(Foreign Key)的概念
又叫外键,外码用于确保数据的一致性和完整性,以及支持跨表的查询和操作。外码是一个表中的一个或多个属性,它引用另一个表(称为参考表)中的主码,以建立两个表之间的联系。外码表示两个表之间的父子关系,其中包含外码的表被称为"子表",参考表被称为"父表"。
例:t_student_course表中的studentId和courseId分别是t_student_info表和t_course表的外键 -
全码(All-key) 的概念
全码是候选码的一种特殊情况。包含了关系表中所有属性的属性组合,这个属性组合能确保每个记录都有唯一标识。
例:t_student_info的全码只能是(StudentID, StudentName,Age ,Gender ) -
集合运算的概念:并(union)、差(difference)、交(intersection)、笛卡尔集(cartesian product)
并集:两个数组合并成一个不含重复数据的数组(数组运算 A∪B)
差集:包含第一个数组且不包含第二个数组中的数据(数组运算A - B)
交集:两个数组中存在的相同的数据组合(数组运算 A∩B)
笛卡尔集:两个表的所有记录组合在一起形成新表(行列式,A x B) -
专门的关系运算概念:选择(selection)、投影(projection)、连接(join)、除(division)
选择运算:选择满足特定条件的记录 (类似于where条件筛选)
投影运算:选取指定属性列,而其他属性忽略,生成一个新表(类似于select a,b,c仅查询特定属性)
连接运算:用于连接两个或多个表根据连接条件连接组合(类似于join连接多个表)
除运算:找出一个表中满足某种条件的记录,可以整除另一个表中的所有记录(类似于where a in (1,2,3,4)) -
连接概念:θ连接、等值连接(equijoin)、自然连接(natural join)
θ连接: 是一种通用的连接操作,它不仅仅限于等值比较,可以使用任意的比较运算符来匹配记录。θ连接允许根据给定的条件将两个表中的记录进行连接,生成一个包含满足条件的记录的结果集。(表 A ⨝θ 表 B) 。语句示例:select * from t_student_course sc join t_student_info si on sc.studentId > si.studentId
等值连接(equi join): 等值连接是θ连接的一种特殊情况,仅限于属性相等比较(表 A ⨝= 表 B)。语句示例:select * from a join b on a.c = b.c
自然连接(natural join): 自然连接是一种特殊的等值连接,它会自动匹配两个表中的相同属性名称的属性。自然连接省略了连接条件,它基于属性名的相等关系来自动匹配记录。语句实例:SELECT * FROM Students NATURAL JOIN Grades; 其中Students和Grades都存在StudentID属性。(表 A ⨝natural 表 B) -
外连接概念:左连接(left join)、右连接(right join)、全连接(full join)
左连接:返回左表中的所有数据并带回右表匹配的数据,若右表不存在则用null填充(A left join B on A.c = B.c )
右连接:与左连接概念相反(A right join B on A.c = B.c)
全连接:返回左表和右表所有数据,不管是否满足连接条件 (A full join B ) -
函数依赖、平凡依赖、非平凡依赖、多值依赖的概念
函数依赖:函数依赖是一个属性或属性集合能够唯一确定另一个或一组其他属性的关系(例如,t_student_info中studentId唯一确定了studentName,Age,Gender这一组)
平凡依赖:平凡依赖是一种特殊的函数依赖,其中被依赖的属性已经包含在依赖属性中。(例如(studentId,studentName)可以推出studentId和studentName)
非平凡依赖:非平凡依赖是指被依赖的属性不包含在依赖属性中,它提供了新的信息(例如t_student_course中无法推出studentId和courseId)
多值依赖:多值依赖指的是一个属性集合对于另一个属性集合具有多个值的关系,即使给定了一部分属性,另一部分属性也可以有多个可能值 (例如,t_student_info中多个studentId对应同一个Age) -
完整性约束的概念:实体完整性、参照完整性、用户自定义完整性
据库管理系统通过强制执行完整性约束来保证数据的正确性。
实体完整性:确保每个表中的每一行都有一个唯一的标识,通常是通过主键来实现
参照完整性:一个表中的外键值必须在另一个表的主键中存在,从而保持数据的一致性。外键引用的值必须存在于被引用表的主键中,或者可以是 NULL(如果允许)。
用户自定义完整性:用户自定义完整性约束是基于特定需求定义的规则,超出了实体和参照完整性的范围,用户自定义完整性约束可以通过触发器、存储过程等数据库对象来实 -
唯一键(unique key)约束的概念
确保某一个属性或一个属性组合的值都是唯一的,即不允许重复值出现,唯一键允许为Null值。有助于防止数据的冗余和不一致性。 -
外键约束的概念、CASCADE、NO ACTION、RESTRICT、SET NULL对更新和删除的区别
外键约束定义了两个表之间的关系,确保一个表中的外键值必须存在于另一个表的主键中。外键约束用于保持数据的一致性和完整性,以及实施参照完整性。
CASCADE:主表的主键更新或删除则子表同步更新删除
NO ACTION:主表的主键关联了外键的时候拒绝更新删除操作
RESTRICT:同NO ACTION(在mysql中)
SET NULL:主表的主键更新删除时,对应的外键设置为NULL -
规范化和反规范化的概念,我们为什么要采用规范化方法
规范化:数据库设计分解为多个表,并使用关系模型的原则来消除重复数据,降低数据冗余,避免数据更新异常。它通常通过一系列的规则(范式)来指导数据库表的设计,确保每个属性都与主键直接相关,减少数据冗余
反规范化:是一种优化技术,用于提高数据库查询性能,特别是复杂查询和联接操作。它涉及将数据库表中的数据冗余复制到其他表中,以减少连接和查询的开销。虽然这可以加速查询,但同时也增加了数据冗余和复杂性。
为什么:规范化方法有助于确保数据库中的数据一致性、可靠性和易于维护性。通过减少冗余数据和更新异常,规范化可以提高数据质量,降低了数据不一致的风险。此外,规范化还为数据库设计提供了清晰的指导原则,使数据库更易于理解和管理。虽然规范化可能会导致一些查询性能的牺牲,但它可以为长期的数据管理和维护带来更大的便利。 -
1NF、2NF、3NF的概念
1NF:每个表中的每一列都是原子的,即每一列的值都是不可再分的;每一行都应该具有唯一的标识符,通常是一个主键;确保数据不会重复存储,每列的值都是单一值
2NF:满足1NF的基础上,非主键列必须完全依赖于主键,消除了部分依赖,减少了数据更新异常
3NF:满足2NF的基础上,消除传递依赖,非主键列之间不应该存在传递依赖关系;3NF 确保表中的数据更具有独立性,减少了数据冗余和传递依赖。