avatar

目录
sql-data-types-constraints-example

SQL数据类型和约束示例:图书管理系统

让我们设计一个简单的图书管理系统的数据库,包括书籍、作者和借阅记录。

1. 作者表 (Authors)

sql
1
2
3
4
5
6
7
8
9
CREATE TABLE Authors (
AuthorID INTEGER PRIMARY KEY,
FirstName VARCHAR(50) NOT NULL,
LastName VARCHAR(50) NOT NULL,
BirthDate DATE,
Nationality VARCHAR(50),
Email VARCHAR(100) UNIQUE,
CHECK (BirthDate <= CURRENT_DATE)
);

数据类型和约束解释:

  • AuthorID:整数类型,主键
  • FirstName, LastName:不可为空的字符串
  • BirthDate:日期类型,有检查约束确保不会是未来日期
  • Email:唯一约束,确保每个邮箱只被使用一次

2. 书籍表 (Books)

sql
1
2
3
4
5
6
7
8
9
10
CREATE TABLE Books (
ISBN CHAR(13) PRIMARY KEY,
Title VARCHAR(200) NOT NULL,
AuthorID INTEGER,
PublicationYear INTEGER CHECK (PublicationYear >= 1000 AND PublicationYear <= EXTRACT(YEAR FROM CURRENT_DATE)),
Genre VARCHAR(50),
Price DECIMAL(10, 2) CHECK (Price >= 0),
StockQuantity INTEGER DEFAULT 0 CHECK (StockQuantity >= 0),
FOREIGN KEY (AuthorID) REFERENCES Authors(AuthorID)
);

数据类型和约束解释:

  • ISBN:固定长度的字符串作为主键
  • Title:不可为空的可变长度字符串
  • AuthorID:外键,关联到Authors表
  • PublicationYear:整数,有检查约束确保年份有效
  • Price:decimal类型,精确到小数点后两位,检查约束确保非负
  • StockQuantity:整数,默认值为0,检查约束确保非负

3. 借阅记录表 (BorrowRecords)

sql
1
2
3
4
5
6
7
8
9
CREATE TABLE BorrowRecords (
BorrowID INTEGER PRIMARY KEY,
ISBN CHAR(13),
BorrowerName VARCHAR(100) NOT NULL,
BorrowDate DATE DEFAULT CURRENT_DATE,
ReturnDate DATE,
FOREIGN KEY (ISBN) REFERENCES Books(ISBN),
CHECK (ReturnDate IS NULL OR ReturnDate >= BorrowDate)
);

数据类型和约束解释:

  • BorrowID:整数类型,主键
  • ISBN:外键,关联到Books表
  • BorrowerName:不可为空的字符串
  • BorrowDate:日期类型,默认为当前日期
  • ReturnDate:日期类型,检查约束确保还书日期不早于借书日期

评论