SQL数据类型和约束示例:图书管理系统
让我们设计一个简单的图书管理系统的数据库,包括书籍、作者和借阅记录。
1. 作者表 (Authors)
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)
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)
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:日期类型,检查约束确保还书日期不早于借书日期