数据库原理概论

第一章:数据库系统概论

数据库:
数据库是用于存储、管理和组织数据的集合。它是一个结构化的数据集合,可被多个用户共享和访问。数据库提供了一种有效的方式来组织和管理大量数据,并支持对数据的快速检索和操作。

关系化数据库管理系统(RDBMS):
关系化数据库管理系统(RDBMS)是一种基于关系模型的数据库管理系统。它使用表(关系)来存储和组织数据,并使用结构化查询语言(SQL)进行数据操作。RDBMS提供了数据的完整性、安全性和一致性,广泛用于各种应用领域。

常见的关系数据库:
在实际应用中,有许多常见的关系数据库,如Oracle、MySQL、Microsoft SQL Server、PostgreSQL等。每个数据库系统具有自己的特点和优势,选择适合特定需求的数据库是设计和开发过程中的重要考虑因素。

SQL:
结构化查询语言(SQL)是一种用于管理关系数据库的标准化语言。它提供了一组命令和语法,用于创建、查询、更新和删除数据库中的数据。SQL具有简单易学的特点,是与关系数据库进行交互的主要方式。

小知识:每个数据库的SQL:
每个关系数据库系统都有自己的SQL变体,尽管它们基本上遵循相同的核心原则和语法。例如,Oracle数据库使用PL/SQL,MySQL使用MySQL语法,Microsoft SQL Server使用T-SQL等。熟悉特定数据库系统的SQL语法对于有效地操作和管理数据库非常重要。

第二章:关系化数据库设计

ER模型:
实体关系(ER)模型是一种用于数据库设计的概念模型。它通过定义实体、属性和关系之间的概念联系,帮助我们理解和描述现实世界中的数据结构。使用ER模型可以捕捉实体间的关系,进而转化为关系型数据库的表结构。

  1. ER模型建模过程:
    ER模型的建模过程包括以下步骤:
  • 确定实体:识别出与系统相关的实体,这些实体代表现实世界中的对象。
  • 确定属性:确定每个实体的属性,这些属性描述了实体的特征和属性。
  • 确定关系:识别实体之间的关系,包括一对一、一对多和多对多关系。
  • 确定主键:为每个实体确定一个唯一标识,用于区分不同的实体。
  • 绘制ER图:使用图形符号和连接线表示实体、属性和关系之间的关系,形成ER图。

基本元素:

(1) 实体集:
实体集表示现实世界中的对象或概念。每个实体集都由一个或多个实体组成,并具有唯一的标识符。

(2) 属性:
属性是实体的特征和描述。每个实体都可以具有一个或多个属性,用于描述实体的特征和属性。

(3) 关系:
关系表示实体集之间的联系和连接。它描述了实体之间的关联和依赖关系,可以是一对一、一对多或多对多的关系。

  1. 关系的基数:
    关系的基数描述了实体集之间关系的数量关系。基数可以是一对一、一对多或多对多的关系。

ER图转为表的设计:
将ER模型转化为关系数据库的表结构是数据库设计的重要步骤。通过将实体集转化为表结构,属性转化为表的列,关系转化为表之间的关联和外键约束,可以将ER图转化为关系数据库的设计。

第一、二、三范式的概念:
第一范式(1NF)要求数据库表中的每个列都是原子性的,即不可再分。每个列都应该包含一个单一的值,而不是多个值。

第二范式(2NF)要求数据库表中的非主键列必须完全依赖于主键,而不能部分依赖。如果有部分依赖的情况,应将其分解为多个表,以确保数据的一致性和完整性。

第三范式(3NF)要求数据库表中的非主键列之间不能存在传递依赖关系。如果存在传递依赖,应将其分解为多个表,以消除冗余和数据不一致的问题。

范式的目的:
范式的目的是通过规范化数据库结构,消除数据冗余和不一致性,提高数据的一致性和完整性。范式设计有助于减少数据重复,提高数据库的性能和可维护性。

冗余的坏处:
冗余是指在数据库中存储相同信息的重复数据。冗余数据会占用额外的存储空间,增加数据的更新和维护的复杂性,并可能导致数据不一致和错误。范式设计的目标之一就是消除或最小化冗余数据。

第三章:数据库语言

SQL语句的运用:
SQL语句用于对关系型数据库进行操作和管理。它包括对数据的增加、删除、修改和查询等操作。

增删改查:

  • 增加(INSERT):使用INSERT语句向数据库表中插入新的数据行。
  • 删除(DELETE):使用DELETE语句从数据库表中删除指定的数据行。
  • 修改(UPDATE):使用UPDATE语句修改数据库表中的数据。
  • 查询(SELECT):使用SELECT语句从数据库表中检索和获取所需的数据。

--增加(INSERT):
INSERT语句用于向数据库表中插入新的数据行。它的语法如下:


INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);

--table_name是要插入数据的表名,column1, column2, ...是要插入数据的列名,value1, value2, ...是对应列的值。通过指定要插入的表和值,可以向数据库中新增数据。

--例如,插入一条新的用户数据到名为users的表中:


INSERT INTO users (name, age, email)
VALUES ('John Doe', 25, 'john.doe@example.com');

--在users表中插入一行数据,包含姓名、年龄和电子邮件。

--删除(DELETE):
DELETE语句用于从数据库表中删除指定的数据行。它的语法如下:
   
DELETE FROM table_name
WHERE condition;

--table_name是要删除数据的表名,condition是用于指定删除条件的语句。通过指定要删除的表和条件,可以从数据库中删除符合条件的数据。

--删除名为users表中年龄小于等于30的用户数据:


DELETE FROM users
WHERE age <= 30;

--删除users表中所有年龄小于等于30的用户数据。

--修改(UPDATE):
UPDATE语句用于修改数据库表中的数据。它的语法如下:
   
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

--table_name是要修改数据的表名,column1 = value1, column2 = value2, ...表示要修改的列和对应的新值,condition是用于指定修改条件的语句。通过指定要修改的表、列、新值和条件,可以更新数据库中符合条件的数据。

--例如,将名为users表中年龄大于等于18的用户的邮箱修改为新的值:

   
UPDATE users
SET email = 'new.email@example.com'
WHERE age >= 18;

--更新users表中所有年龄大于等于18的用户数据的邮箱。

--查询(SELECT):
SELECT语句用于从数据库表中检索和获取所需的数据。它的语法如下:
   
SELECT column1, column2, ...
FROM table_name
WHERE condition;

--column1, column2, ...是要查询的列名,可以使用通配符*表示查询所有列,table_name是要查询的表名,condition是用于指定查询条件的语句。通过指定要查询的列、表和条件,可以从数据库中获取符合条件的数据。

--查询名为users表中年龄大于等于25的用户姓名和邮箱:

   
SELECT name, email
FROM users
WHERE age >= 25;

--返回users表中所有年龄大于等于25的用户的姓名和邮箱。

--灵活运用增删改查操作,可以对数据库进行有效的数据管理和操作。对于不同的应用场景和需求,可以结合各种操作来实现对数据库中数据的增加、删除、修改和查询。

注意:oracle和mysql的多行插入是不一样的

Oracle的多行插入:
在Oracle中,可以使用INSERT ALL语句执行多行插入操作。INSERT ALL允许一次性插入多个数据行到一个或多个表中。
    
INSERT ALL
    INTO table_name (column1, column2, ...)
    VALUES (value1, value2, ...)
    INTO table_name (column1, column2, ...)
    VALUES (value1, value2, ...)
    ....
SELECT * FROM dual;

其中,table_name是目标表的名称,column1, column2, ...是目标表的列名,value1, value2, ...是对应列的值。可以在INSERT ALL语句中多次指定不同的目标表和值,使用SELECT * FROM dual作为最后的查询,以结束INSERT ALL语句。

MySQL的多行插入:
在MySQL中,可以使用INSERT INTO语句的多行值列表实现多行插入。语法如下:
    
INSERT INTO table_name (column1, column2, ...)
VALUES
    (value1, value2, ...),
    (value1, value2, ...),
    .....

其中,table_name是目标表的名称,column1, column2, ...是目标表的列名,(value1, value2, ...)表示一个数据行的值。可以在INSERT INTO语句中按行列出多个数据行的值。

总之每个数据库都有一些自己的特点

SQL就相当于是一直笔,会用了都是最基础的,最重要是你用这支笔来做出什么。
        在数据库设计和管理中,还有许多其他重要的概念和技术,如索引、事务、视图、存储过程和触发器等。索引是用于提高数据检索速度的数据结构,事务是一组数据库操作的逻辑单元,视图是虚拟表,存储过程是为了完成特定任务而预先编译的一组SQL语句,而触发器是在数据库中的特定事件发生时自动执行的动作。

        数据库还涉及到数据完整性约束、安全性、备份和恢复、性能优化等方面的考虑。数据完整性约束用于确保数据的一致性和有效性,安全性涉及对数据库的访问控制和权限管理,备份和恢复是为了防止数据丢失和灾难恢复,而性能优化涉及到调整数据库结构和查询以提高数据库的响应速度和效率。

个人对于范式的一些理解:

        范式是数据库设计中的概念,用于规范化数据表结构,减少数据冗余和提高数据一致性。范式分为不同级别,常用的范式有第一范式(1NF)、第二范式(2NF)、第三范式(3NF)等。

第一范式(1NF):
        第一范式要求数据库表中的每个列都是原子性的,就是每个列不能再分解成更小的数据项。它要求每个表中的每一列都是单一值的,不可再分的。
例如,一个包含学生信息的表,如果将电话号码字段设计为一个包含多个电话号码的列表,就不符合第一范式。正确的做法是将电话号码拆分为多个独立的列,每个列只包含一个电话号码。

第二范式(2NF):
        第二范式要求数据库表中的每个非主键列都完全依赖于主键,而不是依赖于主键的一部分。换句话说,每个非主键列必须与主键形成完整依赖关系。
例如,一个包含订单信息的表,其中包含订单号、产品ID和产品名称。如果产品名称只依赖于产品ID,而不依赖于订单号,那么它就不符合第二范式。正确的做法是将产品名称从订单表中分离出来,创建一个独立的产品表,以订单表和产品表之间的关联关系来实现完整依赖。

第三范式(3NF):
        第三范式要求数据库表中的每个非主键列都不传递依赖于主键。换句话说,非主键列之间不应该存在传递依赖关系。
例如,一个包含员工信息的表,其中包含员工ID、部门ID和部门名称。如果部门名称依赖于部门ID,而部门ID又依赖于员工ID,那么它就不符合第三范式。正确的做法是将部门名称从员工表中分离出来,创建一个独立的部门表,以员工表和部门表之间的关联关系来消除传递依赖。

        通过遵循范式规则,可以使数据库表的结构更加清晰、高效和易于维护。每个范式都有其特定的要求和优势,根据实际需求和数据特点,设计师可以选择适当的范式级别来规范化数据库表结构。

  • 19
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值