4.1 MySQL关系模型的基本原理
- MySQL是一种流行的关系型数据库管理系统(RDBMS),它遵循关系模型的基本原理来组织和存储数据。关系模型是由埃德加·科德(Edgar F. Codd)在1970年代提出的,它使用表格的形式来表示数据,这些表格称为关系。下面是关于MySQL关系模型的基本原理的详细解释:
4.1.1 基本术语
-
关系(Relation):关系是一张二维表,它由行(记录)和列(属性)组成。每列代表一个属性,每行代表一个元组。
-
元组(Tuple):元组是关系中的一行,它代表了一个数据项。
-
属性(Attribute):属性是关系中的一列,它代表了一个数据特征。
-
域(Domain):域是一组具有相同数据类型的值的集合,每个属性都有一个域。
-
主键(Primary Key):主键是关系中的一个或一组属性,它的值可以唯一地标识关系中的每个元组。
-
外键(Foreign Key):外键是一个或一组属性,它在一个关系中引用另一个关系的主键。
-
候选键(Candidate Key):候选键是能够唯一标识关系中每个元组的属性组合。
-
关系模式(Relational Schema):关系模式是对关系的描述,包括关系名、属性名、属性的数据类型和主键。
4.1.2 关系的特征
-
二维表结构:关系模型中的数据以表格的形式存储,每个表格由行和列组成。
-
每列的唯一性:每个列都有一个唯一的列名,并且每个列的值必须来自同一个域。
-
每行的唯一性:每个元组都有一个唯一的主键,它可以用来区分表中的不同行。
-
无重复行:表中的每一行都是唯一的,没有完全相同的两行。
-
列的顺序无关紧要:列的顺序不影响数据的意义。
-
行的顺序无关紧要:行的顺序不影响数据的意义。
案例文字详解
假设我们有一个图书馆管理系统,我们需要存储图书信息和借阅者信息。我们可以创建两个关系:Books 和 Borrowers。
Books 表:
- BookID (主键):每本书的唯一标识符。
- Title:书名。
- Author:作者。
- ISBN:国际标准书号。
Borrowers 表:
- BorrowerID (主键):每个借阅者的唯一标识符。
- Name:借阅者姓名。
- Address:借阅者地址。
借阅关系(Borrowing):
- BorrowerID (外键,引用 Borrowers 表):借阅者的标识符。
- BookID (外键,引用 Books 表):被借阅的书的标识符。
- BorrowDate:借阅日期。
- ReturnDate:归还日期。
好的,让我们通过MySQL代码来演示如何创建上述案例中的表,并展示一些基本的SQL操作。
创建表
首先,我们需要创建Books、Borrowers和Borrowing三个表。
-- 创建Books表
CREATE TABLE Books (
BookID INT AUTO_INCREMENT PRIMARY KEY,
Title VARCHAR(255) NOT NULL,
Author VARCHAR(255) NOT NULL,
ISBN VARCHAR(20) UNIQUE NOT NULL
);
-- 创建Borrowers表
CREATE TABLE Borrowers (
BorrowerID INT AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(255) NOT NULL,
Address VARCHAR(255) NOT NULL
);
-- 创建Borrowing表
CREATE TABLE Borrowing (
BorrowerID INT,
BookID INT,
BorrowDate DATE NOT NULL,
ReturnDate DATE,
FOREIGN KEY (BorrowerID) REFERENCES Borrowers(BorrowerID),
FOREIGN KEY (BookID) REFERENCES Books(BookID),
PRIMARY KEY (BorrowerID, BookID)
);
插入数据
接下来,我们向这些表中插入一些示例数据。
-- 向Books表中插入数据
INSERT INTO Books (Title, Author, ISBN) VALUES
('The Great Gatsby', 'F. Scott Fitzgerald', '9780743273565'),
('1984', 'George Orwell', '9780451524935'),
('To Kill a Mockingbird', 'Harper Lee', '9780060935467');
-- 向Borrowers表中插入数据
INSERT INTO Borrowers (Name, Address) VALUES
('Alice Johnson', '123 Maple Street'),
('Bob Smith', '456 Oak Avenue'),
('Charlie Brown', '789 Pine Road');
-- 向Borrowing表中插入数据
INSERT INTO Borrowing (BorrowerID, BookID, BorrowDate, ReturnDate) VALUES
(1, 1, '2024-01-01', '2024-01-15'),
(2, 2, '2024-01-05', NULL),
(3, 3, '2024-01-10', '2024-01-20');
查询数据
现在,我们可以执行一些查询操作来检索数据。
-- 查询所有书籍
SELECT * FROM Books;
-- 查询所有借阅者
SELECT * FROM Borrowers;
-- 查询所有借阅记录
SELECT * FROM Borrowing;
-- 查询特定借阅者借阅的书籍
SELECT b.Name, bk.Title, bk.Author, br.BorrowDate, br.ReturnDate
FROM Borrowers b
JOIN Borrowing br ON b.BorrowerID = br.BorrowerID
JOIN Books bk ON br.BookID = bk.BookID
WHERE b.Name = 'Alice Johnson';
-- 查询所有未归还的书籍
SELECT bk.Title, bk.Author, br.BorrowDate, br.ReturnDate
FROM Books bk
JOIN Borrowing br ON bk.BookID = br.BookID
WHERE br.ReturnDate IS NULL;
更新数据
我们还可以更新表中的数据,例如,更新归还日期。
-- 更新归还日期
UPDATE Borrowing
SET ReturnDate = '2024-02-01'
WHERE BorrowerID = 2 AND BookID = 2;
删除数据
最后,我们可以删除表中的数据。
-- 删除一条借阅记录
DELETE FROM Borrowing
WHERE BorrowerID = 3 AND BookID = 3;
-- 删除一本书
DELETE FROM Books
WHERE BookID = 3;
-- 删除一个借阅者
DELETE FROM Borrowers
WHERE BorrowerID = 3;
这些代码示例展示了如何在MySQL中创建表、插入数据、查询数据、更新数据和删除数据。这些操作是关系型数据库管理系统中的基本操作。
在这个案例中,Books 和 Borrowers 表通过 Borrowing 表关联起来,形成了一个关系模型。每个表都有主键来唯一标识每条记录,而 Borrowing 表则包含了外键,用来引用其他两个表的主键,从而建立起关系。
这种模型的优点是它提供了一种结构化的方式来组织数据,使得数据的查询、更新和管理变得更加高效和灵活。同时,它也支持复杂的查询操作,如连接(Join)、选择(Select)、投影(Project)和除法(Divide)等。
2002

被折叠的 条评论
为什么被折叠?



