关系模型
1.关系数据库的结构
关系数据库由表的集合构成,每个表有唯一的名字。
instructor表
表中一行代表了一组值之间的联系。由于一个表就是这种关系的集合,表这个概念和数学上的关系这个概念是密切相关的。这正是关系数据模型名称的由来。
元组:一组值的序列(或列表)
n元组就是一个有n个值的元组,对应于表中的一行。
关系——表、元组——行、列——属性
属性的域:对于关系的每个属性,都存在一个允许取值的集合(原子性:不可再分)
空(null)值:表示值未知或不存在
2.数据库模式
数据库模式:数据库的逻辑设计
department (dept_name,buildinng,budget)
数据库实例:给定时刻数据库中数据的快照(具体实例)
3.码
超码(唯一地标识一个元组):一个或多个属性的集合
例如,instructor关系地ID属性足以将不同的教师元组区分开来,因此,ID是一个超码。
候选码(最小超码):使用最少的有限属性构成的超码。
主码:在一个关系中区分不同元组的候选码。
通常把一个关系模式的主码属性列在其他属性的前面
外码:
一个关系模式(如r1)可能在它的属性中包括另一个关系模式(如r2)的主码,这个属性在r1上称作参照r2的外码。关系r1也被成为外码依赖的参照关系,r2叫做外码的被参照关系。
例如,instructor中的dept_name属性在instructor上是外码,它参照department,因为dept_name是department的主码
参照完整性约束:数据库管理系统(DBMS)中用于维护数据一致性和完整性的一种机制。这些约束确保数据库表中的数据满足特定的规则,从而防止无效的数据被插入或更新到数据库中。
以下是几种常见的参照完整性约束:
- 主码约束(Primary Key Constraint)
主码约束确保表中的每一行都有一个唯一的标识符。主键的值不能重复,也不能为空(NULL)。
- 外码约束(Foreign Key Constraint)
外码约束用于维护表之间的关系。它确保一个表中的外键值必须在另一个表的主键中存在。这有助于保持数据的一致性,防止无效的引用。
- 唯一约束(Unique Constraint)
唯一约束确保表中的某一列(或多列)的值是唯一的,即表中不能有两行具有相同的值。
- 非空约束(Not Null Constraint)
非空约束确保表中的某一列不能为空值(NULL)。这意味着在插入或更新记录时,必须提供该列的值。
- 检查约束(Check Constraint)
检查约束用于确保列的值满足特定的条件。例如,可以设置一个检查约束来确保某个数值列的值在特定的范围内。
- 默认约束(Default Constraint)
默认约束为列提供一个默认值,如果插入或更新记录时没有提供该列的值,则使用默认值。
- 级联更新和删除约束(Cascading Update and Delete Constraint)
级联更新和删除约束是外键约束的一个扩展,它定义了当外键关联的行被更新或删除时,相关联的行应该如何处理。
这些约束共同工作,确保数据库数据的准确性和一致性。违反这些约束会导致数据库操作失败,从而防止无效数据的产生。在设计数据库时,正确地设置和使用这些约束是非常重要的,以确保数据的完整性和可靠性。
4.模式图
模式图(Schema Diagram)是一种图形表示方法,用于描述数据库模式(Schema)的结构。数据库模式通常包括表(Table)、列(Column)、数据类型(Data Type)、主码(Primary Key)、外码(Foreign Key)等元素。模式图可以帮助数据库设计者、开发者和其他利益相关者理解数据库的结构,确保数据的一致性和完整性。
模式图通常包括以下元素:
表:用矩形表示,每个矩形代表一个数据库表。
列:用矩形内的列表示,每个矩形内的列表示表中的一个列。
数据类型:用列旁边的文本表示,指明列的数据类型。
主码:用列旁边的下划线表示,表示该列为主码。
外码:用连接线表示,连接两个表,表示它们之间的关联。
关系:用连接线旁边的文本表示,指明表之间的关系类型(如一对多、多对多)。
5.关系查询语言
查询语言:用户用来从数据库中请求获取信息的语言。
过程化语言:用户指导系统对数据库执行一系列操作以计算出所需结果。
非过程化语言:用户只需描述所需信息,而不用给出获取该信息的具体过程。
6.关系运算
关系运算是数据库管理系统(DBMS)中用于比较和操作关系型数据库中的数据的一种运算。关系运算主要包括以下几种类型:
- 比较运算(Comparison Operators)
比较运算用于比较两个值,并返回布尔值(TRUE 或 FALSE)。常见的比较运算符包括:
- 等于(=)
- 不等于(<> 或 !=)
- 大于(>)
- 小于(<)
- 大于等于(>=)
- 小于等于(<=)
- 逻辑运算(Logical Operators)
逻辑运算用于组合比较运算的结果,并返回布尔值。常见的逻辑运算符包括:
- 逻辑与(AND)
- 逻辑或(OR)
- 逻辑非(NOT)
- 连接运算(Join Operations)
连接运算用于将两个或多个表中的行基于某个条件进行匹配。常见的连接类型包括:
- 内连接(INNER JOIN)
- 左连接(LEFT JOIN)
- 右连接(RIGHT JOIN)
- 全连接(FULL JOIN)
- 子查询(Subqueries)
子查询是指在另一个查询中嵌入的查询。子查询可以返回单个值,也可以返回表。子查询通常用于WHERE子句、FROM子句、HAVING子句等。
- 集合运算(Set Operations)
集合运算用于处理多个查询的结果集,包括:
- 并集(UNION)
- 交集(INTERSECT)
- 差集(EXCEPT)
- 排序和分组(Sorting and Grouping)
排序和分组是SQL查询中常用的操作,用于对查询结果进行排序和分组。
- ORDER BY:用于对查询结果进行排序。
- GROUP BY:用于将查询结果分组,通常与聚合函数(如COUNT、SUM、AVG等)一起使用。
关系运算是数据库查询和操作的基础,通过这些运算,可以执行复杂的数据检索和处理任务。
7.关系代数
关系代数是一种形式化的数学理论,用于描述和操作关系型数据库中的数据。它基于集合代数,提供了一组操作符和规则,用于执行数据库查询和更新操作。关系代数由Alfred V. Aho、Peter J. Weinberger和Brian W. Kernighan在1979年提出,是数据库理论的基础之一。
关系代数的基本操作包括:
- 并(Union)
两个关系R和S的并集表示为R ∪ S,包含所有在R或S中的元组。
- 差(Difference)
两个关系R和S的差集表示为R - S,包含所有在R中但不在S中的元组。
- 交(Intersection)
两个关系R和S的交集表示为R ∩ S,包含同时出现在R和S中的元组。
- 笛卡尔积(Cartesian Product)
两个关系R和S的笛卡尔积表示为R × S,包含所有可能的元组组合,其中第一个元组来自R,第二个元组来自S。
- 投影(Projection)
关系R的投影表示为πA(R),其中A是R中的属性集合,包含A中所有属性的元组。
- 选择(Selection)
关系R的选择表示为σF(R),其中F是R上的条件表达式,包含满足F条件的所有元组。
- 连接(Join)
关系R和S的连接表示为R ⋈ S,包含所有满足连接条件的元组对。
- 自然连接(Natural Join)
关系R和S的自然连接表示为R ⋈_n S,包含所有在R和S中具有相同值的元组。
- 除(Division)
关系R除以关系S表示为R ÷ S,包含所有在R中但不在S中的元组,并且这些元组在R中的每个属性值都能在S中找到。
关系代数的操作符通常用符号表示,如上述的并、差、交、笛卡尔积等。这些操作符可以组合使用,形成复杂的查询表达式,用于执行数据库查询、数据更新和维护等操作。关系代数提供了一种精确和一致的方式来描述数据库操作,是理解和设计数据库查询语言的基础。
非关系模型(了解)
非关系模型(NoSQL)是一种数据库管理系统,它不依赖于传统的关系模型(如SQL)。非关系模型数据库通常用于处理大规模的数据集,它们提供了灵活的数据模型,可以水平扩展,并且能够处理不同类型的数据,如键值对、文档、宽列存储和图数据。
非关系模型的特点
1. 灵活的数据模型
非关系模型数据库通常不需要固定的模式(schema),这意味着数据可以以不同的格式存储,并且可以动态地添加或删除字段。
2. 水平扩展性
非关系模型数据库通常设计为可以在廉价的硬件上水平扩展,即通过增加更多的服务器来提高数据库的存储容量和计算能力。
3. 高可用性和分布式设计
许多非关系模型数据库采用分布式设计,可以在多个数据中心之间复制数据,提供高可用性和容错能力。
4. 优化的读写性能
非关系模型数据库针对特定的读写操作模式进行了优化,例如,键值存储通常用于快速读取和写入,而文档数据库则适合于复杂的查询和事务。
5. 适合大数据和实时应用
非关系模型数据库适合处理大数据和实时应用,如社交网络、大数据分析和实时推荐系统。
6. 多种数据模型
非关系模型数据库支持多种数据模型,包括:
- 键值存储:数据以键值对的形式存储,如Redis和Memcached。
- 文档存储:数据以文档的形式存储,如MongoDB和Couchbase。
- 宽列存储:数据以列簇的形式存储,如Cassandra和HBase。
- 图数据库:数据以图的形式存储,节点和边代表实体和关系,如Neo4j和Amazon Neptune。
非关系模型数据库提供了与传统关系数据库不同的解决方案,它们更适合现代应用程序的需求,特别是在需要处理大量非结构化或半结构化数据时。