跳到主要内容

数据库

A-Level 计算机科学 · 第 8 主题

训练
本章视频课 打开视频页面
17:18

Databases & the Relational Model

Before databases, each program kept its own flat files — one file per program. Picture a shop. The sales program, the billing program, and the shipping program…

英文讲解 · 内嵌中英文字幕

8.1

数据库概念

大纲
Candidates should be able to: Notes and guidance
Show understanding of the limitations of using a file-based approach for the storage and retrieval of data
Describe the features of a relational database that address the limitations of a file-based approach
Show understanding of and use the terminology associated with a relational database model Including entity, table, record, field, tuple, attribute, primary key, candidate key, secondary key, foreign key, relationship (one-to-many, one-to-one, many-to-many), referential integrity, indexing
Use an entity-relationship (E-R) diagram to document a database design
Show understanding of the normalisation process First Normal Form (1NF), Second Normal Form (2NF) and Third Normal Form (3NF)
Explain why a given set of database tables are, or are not, in 3NF
Produce a normalised database design for a description of a database, a given set of data, or a given set of tables

来源:剑桥国际大纲

在数据库之前,程序把数据存储在平面文件(flat files)中——通常每个程序一个文件。这对小数据没问题,但在规模上会崩溃。

一间满是文件柜和文件夹的办公室
基于文件的存储把数据保存在分开的文件中,像文件柜里的纸——难以搜索且容易重复

局限

  • 数据冗余(data redundancy)——相同的数据(一个客户的地址)保存在几个文件中,每个程序一个,既浪费存储,每个副本又都要更新。
  • 数据不一致(data inconsistency)——一个副本更新了而另一个没有,文件之间互相矛盾,没人知道哪个是对的。
  • 数据依赖(data dependence)——每个程序都是针对其文件的确切布局写的;改一个字段的长度或加一个字段,每个读该文件的程序都要重写。
  • 无法共享访问——一个程序使用文件时文件被锁定,用户不能同时处理数据。
  • 完整性(integrity)薄弱——没有集中规则阻止无效值或指向不存在客户的链接;安全薄弱——访问按文件而不是按字段控制;跨文件的查询每次都要一个新程序。
工资单和销售程序各链接到它们自己分开的数据文件,所以员工编号字段被存储了两次
基于文件的方法:每个程序保存它自己的文件

一个关系数据库(relational database)通过把数据存储在由一个所有程序都使用的软件(DBMS)管理的中来修复这些。

一个 DBMS 容纳表设计、验证规则、访问权限和数据,一个单一的共享数据库,被工资单和销售应用程序两者使用
数据库方法:一个 DBMS 为所有程序服务

为什么关系数据库更好——三分答案。 每项数据只在一个表中存储一次,表之间用键连接,所以没有冗余、没有不一致;数据与程序独立,程序向 DBMS 索取需要的数据,结构改变时不受影响;DBMS 集中执行完整性规则,按用户和按字段控制访问,允许多用户同时使用,并且无需编写新程序就能回答任何查询

例题。 一家维修店用基于文件的方法存储顾客、设备和维修工作,每个程序一个文件。给出这造成的三个问题,并描述关系数据库如何消除它们。

顾客的姓名和电话既存在维修文件里存在发票文件里(冗余);顾客换号码时,一个文件更新了而另一个没有(不一致);店里想要一份新报表——每位技师的维修数——就得写一个新程序去读文件(无法即席查询)。在关系数据库中,顾客只在 CUSTOMER 表中存储一次,REPAIR 表用 CustomerID 引用它,所以改动只做一次、处处可见;报表只是一条 SQL 查询。

词汇表 训练
英文 中文 拼音
flat files/flæt faɪlz/ 平面文件 píng miàn wén jiàn
data redundancy/ˈdeɪtə rɪˈdʌndənsi/ 数据冗余 shù jù rǒng yú
data inconsistency/ˈdeɪtə ˌɪnkənˈsɪstənsi/ 数据不一致 shù jù bù yī zhì
integrity/ɪnˈteɡrɪti/ 完整性 wán zhěng xìng
relational database/rɪˈleɪʃənl ˈdeɪtəbeɪs/ 关系数据库 guān xì shù jù kù
DBMS/ˌdiː biː em ˈes/ 数据库管理系统 shù jù kù guǎn lǐ xì tǒng
SQL/ˌes kjuː ˈel/ 结构化查询语言 jié gòu huà chá xún yǔ yán
练习卷 双页
8.1

关系模型 —— 术语

  • (table,关系)——行和列的一个网格;每种实体(entity)一个表(例如 CUSTOMER)。
  • 记录(record,行,也叫元组(tuple))——一行;实体的一个实例。
  • 字段(field,列,也叫属性(attribute))——一列;关于每条记录的一条信息。
  • 主键(primary key)——唯一标识每条记录的一个字段(或多个字段);从不为空或重复。
  • 外键(foreign key)——一个值匹配另一个表主键的字段,把两者链接起来。
  • 复合键(composite key)——由两个或更多字段一起构成的一个主键。
  • 候选键(candidate key)——任何可以是主键的字段。
  • 次键(secondary key)——一个为快速搜索而建立索引的非主字段。
  • 索引(indexing)——在一个字段上建立一个索引,使查找和连接运行得更快。
  • 参照完整性(referential integrity)——每个外键值必须匹配一个现有的主键(没有孤立记录)。

一个表用简写书写,主键加下划线、外键标注:

CUSTOMER(CustomerID, Name, Phone)
ORDER(OrderID, CustomerID, OrderDate)   -- CustomerID is FK → CUSTOMER
两个由一个外键链接的表:CUSTOMER 表有主键 CustomerID;ORDER 表有它自己的主键 OrderID 加一个 CustomerID 外键,它的值匹配 CUSTOMER 中的一个 CustomerID
一个外键链接两个表:ORDER.CustomerID 匹配主键 CUSTOMER.CustomerID

例题。 说明关系数据库模型中实体主键参照完整性的含义,并补全元组属性的术语 ↔ 描述表。

实体是被存储数据的对象——一个人、物体或事件——它成为一个表。主键是唯一标识表中每条记录的属性(或属性组合)。参照完整性指每个外键值必须匹配它所引用的表中某个主键的值,这样一条记录就不能引用一条不存在的记录。元组是表的一行(一条记录);属性是一列(一个字段)。记住这些配对:表/关系,记录/元组,字段/属性。

探索

Read a relational table with SELECT

A relational table is just rows (records) and columns (fields). WHERE keeps the rows that match a condition; SELECT then keeps only the columns you asked for.

词汇表 训练
英文 中文 拼音
field/fiːld/ 字段 zì duàn
table/ˈteɪbl/ biǎo
entity/ˈentɪti/ 实体 shí tǐ
record/ˈrekɔːd/ 记录 jì lù
tuple/ˈtuːpl/ 元组 yuán zǔ
attribute/ˈætrɪbjuːt/ 属性 shǔ xìng
primary key/ˈpraɪməri kiː/ 主键 zhǔ jiàn
foreign key/ˈfɒrən kiː/ 外键 wài jiàn
composite key/ˈkɒmpəzɪt kiː/ 复合键 fù hé jiàn
candidate key/ˈkændɪdeɪt kiː/ 候选键 hòu xuǎn jiàn
secondary key/ˈsekəndəri kiː/ 次键 cì jiàn
indexing/ˈɪndeksɪŋ/ 索引 suǒ yǐn
referential integrity/ˌrefəˈrenʃl ɪnˈteɡrɪti/ 参照完整性 cān zhào wán zhěng xìng
8.1

实体-关系(E-R)图

一个实体关系图(entity-relationship diagram)显示结构:每个实体是一个矩形,每个关系是一条线,在每端标注基数(cardinality):

  • 一对一(1:1)。
  • 一对多(one-to-many,1:M)——每个客户有许多订单;每个订单有一个客户。
  • 多对多(many-to-many,M:N)——学生选许多课程,而课程有许多学生。
一个 E-R 图,一个 STUDENT 实体和一个 CLASS 实体由一条关系线连接,学生端是鸦爪的"多"、课程端是一条"一"的横杠
一个 E-R 图:一个班有许多学生
"一"、"多"、"有且仅一"、"零或一"、"一或多"和"零或多"的鸦爪线端符号
一个关系基数的鸦爪符号

一个多对多关系不能直接存储。把它拆成两个一对多关系,通过一个容纳两个外键的连接表(link table):

ENROLMENT(StudentID, CourseID, EnrolmentDate)
STUDENT 和 COURSE 之间的一个多对多关系,存储为通过一个容纳 StudentID 和 CourseID 的 ENROLMENT 连接表的两个一对多关系
一个连接表把一个多对多关系解决为两个一对多关系

为给定的一组表画 E-R 图。 每个表成为一个实体。凡是一个表持有指向另一个表的外键,就存在一个关系;它从持有外键的表(的一端)连到以该键为主键的表(的一端)。一个有两个外键、没有其他身份的表通常是解决多对多关系的连接表。给每条线标上关系类型。

一个维修店数据库的 E-R 图,四个实体:CUSTOMER 一对多 DEVICE,DEVICE 一对多 REPAIR,TECHNICIAN 一对多 REPAIR,用鸦爪符号并标出主键和外键
从表画图:每个外键就是一个一对多关系,"多"在持有它的表那一端

例题。 一家维修店有表 CUSTOMER(CustomerID, Name, Phone)DEVICE(DeviceID, CustomerID, Type, Model)TECHNICIAN(TechnicianID, Name)REPAIR(RepairID, DeviceID, TechnicianID, RepairDate, Cost)。指出各关系及其类型。

DEVICE 持有 CustomerID,所以 CUSTOMER–DEVICE 是一对多(一个顾客,许多设备)。REPAIR 持有 DeviceID,所以 DEVICE–REPAIR 是一对多;它还持有 TechnicianID,所以 TECHNICIAN–REPAIR 是一对多。没有直接的 CUSTOMER–REPAIR 线:联系经由 DEVICE。三条线,三个鸦爪,都在 REPAIR 或 DEVICE 那一端。

词汇表 训练
英文 中文 拼音
entity-relationship diagram/ˈentɪti rɪˈleɪʃənʃɪp ˈdaɪəɡræm/ 实体关系图 shí tǐ guān xì tú
cardinality/ˌkɑːdɪˈnælɪti/ 基数 jī shù
one-to-many/wʌn tə ˈmeni/ 一对多 yī duì duō
link table/lɪŋk ˈteɪbl/ 连接表 lián jiē biǎo
8.1

规范化

规范化(normalisation)组织表以减少冗余和不一致,按顺序经过各范式(normal forms)。

  • 第一范式(1NF)——每个字段容纳一个单一(原子(atomic))值,没有重复组,并有一个主键。
  • 第二范式(2NF)——处于 1NF,并且每个非键字段依赖于整个主键(只对一个复合键有意义)。
  • 第三范式(3NF)——处于 2NF,并且每个非键字段依赖于主键,而不依赖于另一个非键字段(没有传递依赖(transitive dependency))。

一个 3NF 设计把每个事实存储一次,所以插入/更新/删除异常消失。权衡是更多的表和更多的连接。以 3NF 为目标。

要产生一个 3NF 设计:找出实体及其属性;为每个选择一个主键;拆分重复/非原子字段(1NF);拆分依赖于一个复合键一部分的字段(2NF);拆分传递地依赖于键的字段(3NF);为关系添加外键。

规范化:一个客户姓名和电话在每个订单上重复的表被拆成一个单独的 ORDER 表和 CUSTOMER 表,所以每个事实被存储一次
规范化通过把重复的数据拆到它自己的表中来去除冗余

例题。ORDER(OrderID, CustomerID, CustomerName, ProductID, Quantity) 的复合主键是 (OrderID, ProductID)。把它规范化到 3NF。逐个用主键去检验每个非键字段。Quantity 同时依赖 OrderIDProductID,这没问题。但 CustomerID 只依赖 OrderID - 也就是复合主键的一部分。这是部分依赖,所以该表不满足 2NF。把它拆成 ORDER_LINE(OrderID, ProductID, Quantity)ORDER(OrderID, CustomerID, CustomerName)。再检验 3NF:在新的 ORDER 表中,CustomerName 依赖于 CustomerID,而后者不是主键 - 这是传递依赖。再拆一次:ORDER(OrderID, CustomerID)CUSTOMER(CustomerID, CustomerName)。要点出破坏每种范式的那种依赖(部分依赖破坏 2NF,传递依赖破坏 3NF);写"它有重复数据"只是在描述症状,得不到分。

对任何表都要问的三个问题。 每个单元格是否都是单一值、没有重复组? 不是,就不在 1NF。如果键是复合的,每个非键字段是否都依赖于整个键? 若某字段只依赖于它的一部分,就存在部分依赖(partial dependency),表不在 2NF。每个非键字段是否只依赖于键? 若某字段依赖于另一个非键字段,就存在传递依赖,表不在 3NF。"解释为什么该表不在 3NF"的答案要说出依赖的名称和涉及的字段。

分三步规范化一张租车表:为 1NF 去除汽车的重复组,为 2NF 把只依赖 CarReg 的汽车细节移到 CAR 表,为 3NF 把依赖 CustomerID 的顾客细节移到 CUSTOMER 表
1NF 去除重复组,2NF 去除部分依赖,3NF 去除传递依赖

例题。 一家租车店把每次租车记录为 RENTAL(RentalID, RentalDate, CustomerID, CustomerName, CustomerPhone, CarReg, CarModel, DailyRate, Days),一次租车可以包含几辆车。解释为什么该表未规范化,并给出 3NF 设计。

不在 1NF: 汽车字段 CarReg, CarModel, DailyRate, Days 构成一个重复组——一次租车有几辆车。把它们移到 RENTAL_CAR(RentalID, CarReg, CarModel, DailyRate, Days),复合键为 (RentalID, CarReg)不在 2NF:RENTAL_CAR 中,CarModelDailyRate 只依赖于 CarReg——部分依赖。把它们移到 CAR(CarReg, CarModel, DailyRate),留下 RENTAL_CAR(RentalID, CarReg, Days)不在 3NF:RENTAL 中,CustomerNameCustomerPhone 依赖于非键字段 CustomerID——传递依赖。把它们移到 CUSTOMER(CustomerID, CustomerName, CustomerPhone),留下 RENTAL(RentalID, RentalDate, CustomerID)。3NF 设计是四个表——CUSTOMERRENTALRENTAL_CARCAR——以 CustomerIDRentalIDCarReg 为外键;给每个主键加下划线。

词汇表 训练
英文 中文 拼音
normalisation/ˌnɔːməlaɪˈzeɪʃn/ 规范化 guī fàn huà
normal forms/ˈnɔːml fɔːmz/ 范式 fàn shì
atomic/əˈtɒmɪk/ 原子 yuán zi
transitive dependency/ˈtrænsɪtɪv dɪˈpendənsi/ 传递依赖 chuán dì yī lài
partial dependency/ˈpɑːʃl dɪˈpendənsi/ 部分依赖 bù fèn yī lài
8.2

数据库管理系统(DBMS)

大纲
Candidates should be able to: Notes and guidance
Show understanding of the features provided by a Database Management System (DBMS) that address the issues of a file based approach Including: • data management, including maintaining a data dictionarydata modellinglogical schemadata integritydata security, including backup procedures and the use of access rights to individuals / groups of users
Show understanding of how software tools found within a DBMS are used in practice Including the use and purpose of: • developer interfacequery processor

来源:剑桥国际大纲

一个 DBMS(数据库管理系统)集中管理数据库。修复基于文件的局限的特性:

  • 数据字典(data dictionary)——对每个表、字段、类型和键的描述;程序查询它而不是硬编码结构。
  • 冗余/一致性控制——每个事实存储一次。
  • 并发访问(concurrent access)控制——锁和事务让许多用户一次工作。
  • 备份(backup)和恢复;安全和每用户权限。
  • 完整性规则——键、唯一和范围约束,集中强制执行。
  • 事务(transactions)——一组全部成功或全部失败的操作。
  • 视图(views)——向每个用户显示"他们的"那一片数据的虚拟表。
  • 数据管理(data management)和数据建模(data modelling)——控制数据如何存储,并把它的结构定义为一个逻辑模式(logical schema,逻辑设计,独立于物理存储)。
  • 数据完整性(data integrity)和数据安全(data security)——集中强制正确性并控制访问。
  • 一个查询处理器(query processor)运行查询;一个开发者接口(developer interface)给出构建应用程序的工具和 API。

它的工具包括一个数据字典编辑器、一个查询构建器、一个表单构建器、一个报表生成器、用户管理,以及一个 SQL 编辑器。

数据字典里有什么("给出三项"的题目):表的名称;每个表中字段的名称;每个字段的数据类型和长度;主键、外键以及表之间的关系;验证规则;索引;以及谁可以访问每个表。它是元数据——关于数据的数据——DBMS 用它检查每条查询和每次改动。

DBMS 如何保证数据安全("描述两种方法"的题目):身份验证(authentication)——任何访问之前先输入用户名和密码,或用生物特征;访问权限——每个用户或用户组只被允许读、写或删除某些表或字段,常通过视图实现;对存储的数据和传给它的数据加密,使复制出去的文件无法读取;定期备份,使数据在丢失后可以恢复;还有一份记录谁改了什么的事务日志。

两个软件工具。 开发者接口是程序员用来构建数据库及其上应用程序的工具:创建表、设置键和验证、编写查询和 SQL、设计表单和报表,而不必知道数据在物理上如何存储。查询处理器接受一条查询(来自程序的 SQL,或在接口中构建的查询),对照数据字典检查它,找出最高效的执行方式,取出数据并返回结果。

逻辑模式。 DBMS 把逻辑设计(存在哪些表和字段、它们如何关联)与物理存储(文件、索引、磁盘块)分开。程序面对的是逻辑模式,所以物理存储可以重新组织而一个程序都不用改——这正是基于文件的方法所缺少的数据独立性。

一块揭开外壳的硬盘,露出层叠的镜面盘片和悬在其上的读写磁头臂
逻辑模式所隐藏的物理存储:硬盘旋转的盘片和读写磁头
探索

Database service lab

Watch how a DBMS turns a query into safe shared data access.

探索

Database service lab

Watch how a DBMS turns a query into safe shared data access.

词汇表 训练
英文 中文 拼音
query/ˈkwɪərɪ/ 查询 chá xún
data dictionary/ˈdeɪtə ˈdɪkʃənəri/ 数据字典 shù jù zì diǎn
concurrent access/kənˈkʌrənt ˈækses/ 并发访问 bìng fā fǎng wèn
transactions/trænˈsækʃnz/ 事务 shì wù
backup/ˈbækʌp/ 备份 bèi fèn
views/vjuːz/ 视图 shì tú
data management/ˈdeɪtə ˈmænɪdʒmənt/ 数据管理 shù jù guǎn lǐ
data modelling/ˈdeɪtə ˈmɒdəlɪŋ/ 数据建模 shù jù jiàn mó
logical schema/ˈlɒdʒɪkl ˈskiːmə/ 逻辑模式 luó jí mó shì
data integrity/ˈdeɪtə ɪnˈteɡrɪti/ 数据完整性 shù jù wán zhěng xìng
data security/ˈdeɪtə sɪˈkjʊərɪti/ 数据安全 shù jù ān quán
query processor/ˈkwɪərɪ ˈprəʊsesə/ 查询处理器 chá xún chǔ lǐ qì
developer interface/dɪˈveləpə ˈɪntəfeɪs/ 开发者接口 kāi fā zhě jiē kǒu
authentication/ɔːˌθentɪˈkeɪʃn/ 身份验证 shēn fèn yàn zhèng
观看视频课 练习卷 双页
8.3

数据定义语言(DDL)与数据操纵语言(DML)

大纲
Candidates should be able to: Notes and guidance
Show understanding that the DBMS carries out all creation/modification of the database structure using its Data Definition Language (DDL)
Show understanding that the DBMS carries out all queries and maintenance of data using its DML
Show understanding that the industry standard for both DDL and DML is Structured Query Language (SQL) Understand a given SQL statement
Understand given SQL (DDL) statements and be able to write simple SQL (DDL) statements using a sub-set of statements Create a database (CREATE DATABASE) Create a table definition (CREATE TABLE), including the creation of attributes with appropriate data types: • CHARACTER • VARCHAR(n) • BOOLEAN • INTEGER • REAL • DATE • TIME change a table definition (ALTER TABLE) add a primary key to a table (PRIMARY KEY (field)) add a foreign key to a table (FOREIGN KEY (field) REFERENCES Table (Field))
Write an SQL script to query or modify data (DML) which are stored in (at most two) database tables Queries including SELECT... FROM, WHERE, ORDER BY, GROUP BY, INNER JOIN, SUM, COUNT, AVG
Data maintenance including INSERT INTO, DELETE FROM, UPDATE

来源:剑桥国际大纲

SQL(结构化查询语言,Structured Query Language)有两半:

SQL 分成 DDL(构建结构)和 DML(处理数据)
DDL 构建数据库结构;DML 处理数据
  • 数据定义语言(Data Definition Language,DDL)——创建或改变结构(表、键、约束)。
  • 数据操纵语言(Data Manipulation Language,DML)——处理数据(插入、更新、删除、查询(query))。

DDL 基础

CREATE TABLE CUSTOMER (
  CustomerID INTEGER PRIMARY KEY,
  Name VARCHAR(50) NOT NULL,
  Phone VARCHAR(20)
);

添加一个外键:

CREATE TABLE ORDER (
  OrderID INTEGER PRIMARY KEY,
  CustomerID INTEGER,
  OrderDate DATE,
  FOREIGN KEY (CustomerID) REFERENCES CUSTOMER(CustomerID)
);

修改和删除:

ALTER TABLE CUSTOMER ADD Email VARCHAR(100);
DROP TABLE CUSTOMER;

常见类型:INTEGERREALVARCHAR(n)CHAR(n)(也叫 CHARACTER(n))、DATETIMEBOOLEANDECIMAL(p, s)

DML 基础

SELECT 查询:

一个 SELECT 查询只返回匹配它条件的行
一个 SELECT 查询只返回匹配它条件的行
SELECT Name, Phone
FROM CUSTOMER
WHERE City = 'London'
ORDER BY Name ASC;

SELECT 列出字段,FROM 命名表,WHERE 过滤行,ORDER BY 排序。

一个连接(join)用一个外键关系组合两个表:

SELECT C.Name, O.OrderDate
FROM CUSTOMER C INNER JOIN ORDER O
  ON C.CustomerID = O.CustomerID
WHERE O.OrderDate >= '2024-01-01';
一条逐行标注的 SQL 查询:SELECT 指定字段和一个 COUNT 列,FROM 指定带别名的第一个表,INNER JOIN ON 通过外键连接第二个表,WHERE 保留匹配的行,GROUP BY 使每个顾客一行,ORDER BY 对结果排序
查询的各部分,按必须书写的顺序

聚合函数(aggregate functions,COUNTSUMAVGMINMAX)常与 GROUP BY 一起用:

SELECT CustomerID, COUNT(*) AS NumOrders
FROM ORDER
GROUP BY CustomerID;

插入、更新、删除:

INSERT INTO CUSTOMER (CustomerID, Name, Phone)
VALUES (101, 'Ada Lovelace', '020-1234-5678');

UPDATE CUSTOMER SET Phone = '020-9999-0000' WHERE CustomerID = 101;

DELETE FROM CUSTOMER WHERE CustomerID = 101;

总是在 UPDATEDELETE 上加一个 WHERE 子句,否则改变会命中每一行。

考试 SQL 的提示

  • 使用题目中确切的表名和字段名。
  • 用单引号引起字符串('Smith');不要引起数字。
  • 比较:=<><=>=<>
  • LIKE 'A%' 匹配任何以 A 开头的(% = 任何字符串,_ = 一个字符);IN (1,2,3);BETWEEN 10 AND 20
  • AND / OR / NOT 组合条件,并以一个分号结束每条语句。

考试要的 DDL 模式。 每条 CREATE TABLE 给每个字段命名并写出类型,标出主键,并声明每个外键及其引用的表;复合键单独占一行声明:

CREATE TABLE RENTAL_CAR (
  RentalID INTEGER,
  CarReg VARCHAR(8),
  Days INTEGER,
  PRIMARY KEY (RentalID, CarReg),
  FOREIGN KEY (RentalID) REFERENCES RENTAL(RentalID),
  FOREIGN KEY (CarReg) REFERENCES CAR(CarReg)
);

例题。CUSTOMER(CustomerID, Name, Phone)DEVICE(DeviceID, CustomerID, Type, Model),写 SQL 脚本:(a) 按姓名字母顺序列出每个拥有类型为 'tablet' 的设备的顾客的姓名和电话;(b) 统计每种类型的设备数;(c) 记录顾客 17 现在的电话号码是 '0771 234 5678';(d) 添加一台新设备,ID 305,类型 'laptop'、型号 'X1',属于顾客 17。

(a)

SELECT CUSTOMER.Name, CUSTOMER.Phone
FROM CUSTOMER INNER JOIN DEVICE
  ON CUSTOMER.CustomerID = DEVICE.CustomerID
WHERE DEVICE.Type = 'tablet'
ORDER BY CUSTOMER.Name ASC;

(b)

SELECT Type, COUNT(DeviceID) AS NumberOfDevices
FROM DEVICE
GROUP BY Type;

(c) UPDATE CUSTOMER SET Phone = '0771 234 5678' WHERE CustomerID = 17; (d) INSERT INTO DEVICE (DeviceID, CustomerID, Type, Model) VALUES (305, 17, 'laptop', 'X1');

分数按子句给——字段、表、连接条件、WHEREORDER BY——所以一个子句错了的脚本仍能得到其余的分。涉及两个表时一律写 表.字段

例题。 解释这段脚本做什么:SELECT T.Name, SUM(R.Cost) AS Total FROM TECHNICIAN T INNER JOIN REPAIR R ON T.TechnicianID = R.TechnicianID GROUP BY T.Name;

它输出每位技师的姓名以及该技师所做维修的总费用,每位技师一行:两个表通过 TechnicianID 连接,行按姓名分组,每组的费用相加。被问脚本做什么时,描述结果,而不是语法。

探索

Stitch two tables with INNER JOIN

A join matches rows where the foreign key equals the primary key — here Orders.CustomerID = Customer.CustomerID — and combines each matching pair into one wider row.

探索

SELECT … WHERE

Step through a query: WHERE keeps the rows that match, then SELECT picks the columns you asked for.

词汇表 训练
英文 中文 拼音
join/dʒɔɪn/ 连接 lián jiē
Data Definition Language/ˈdeɪtə ˌdefɪˈnɪʃn ˈlæŋɡwɪdʒ/ 数据定义语言 shù jù dìng yì yǔ yán
Data Manipulation Language/ˈdeɪtə məˌnɪpjʊˈleɪʃn ˈlæŋɡwɪdʒ/ 数据操纵语言 shù jù cāo zòng yǔ yán
aggregate functions/ˈæɡrɪɡeɪt ˈfʌŋkʃnz/ 聚合函数 jù hé hán shù
观看视频课 练习卷 双页
8.3

考官认可的定义

定义题按固定措辞给分。把这些记准,并且只给一个答案。

术语 定义
实体 被存储数据的对象——人、物体或事件——在关系数据库中成为一个表
属性 实体的一项数据(表中的一列)
元组 表中的一行:一个实体的一个实例
主键 唯一标识表中每条记录的一个属性或属性组合
外键 一个表中的属性,其值与另一个表中的主键匹配,用来把两个表连接起来
候选键 任何可以选作主键的属性(或组合)
次键 为快速搜索或排序而建立索引的非主键属性
复合键 由两个或更多属性一起构成的主键
参照完整性 每个外键值必须与被引用表中已有的主键值匹配
第一范式 每个属性都是原子值、没有重复组、有主键的表
第二范式 处于 1NF,且每个非键属性都依赖于整个主键(没有部分依赖)
第三范式 处于 2NF,且非键属性之间没有依赖(没有传递依赖)
数据字典 DBMS 保存的关于数据库结构的元数据:表、字段、类型、键、关系、验证
DDL / DML 用来定义或修改数据库结构的语言 / 用来查询和维护数据库中数据的语言
8.3

考试技巧

  • 精确地定义术语:实体、属性、主键、外键,以及关系类型(1:1、1:多、多:多)。
  • 在每个范式给出一个理由:1NF(没有重复组)、2NF(没有部分依赖)、3NF(没有非键依赖)——并说出涉及的字段。
  • 解释一个 DBMS 提供什么(数据独立性、安全、完整性、并发访问、数据字典、开发者接口、查询处理器)。
  • 区分 DDL(定义结构)和 DML(查询和改变数据),并按子句写 SQL:SELECTFROMINNER JOIN … ONWHEREGROUP BYORDER BY
  • 从表画 E-R 图时,先找出每个外键:每个外键就是一个一对多关系,"多"在持有它的表那一端。

常见错误

  • 直接画多对多关系。它必须通过一个持有两个外键的连接表拆成两个一对多关系。
  • 用"数据重复了"解释一个表不在 3NF。要说出依赖(部分或传递)以及涉及的字段。
  • 在 SQL 中用双引号引字符串,或给数字加引号。字符串用 '单引号',数字不加引号。
  • INNER JOIN 后漏掉 ON 条件。没有它两个表就没有连接起来。
  • SELECT 里把一个普通字段与 COUNTSUM 放在一起却没有 GROUP BY
  • UPDATEDELETE 没有 WHERE。这会改变或删除表中的每一行。

本主题的互动课程

逐步学习,并即时检测练习。

A-Level 计算机科学历年真题

A-Level 计算机科学的更多主题

登录或创建账号

IGCSE, A-Level & AP