SQL 数据库设计:实现个人信息、教育、工作经验、技能和语言表格
SQL 数据库设计:个人信息、教育、工作经验、技能和语言表格
本教程演示了如何使用 SQL 创建和优化一个数据库,包含个人信息、教育、工作经验、技能和语言表格。我们涵盖了主键、外键、唯一约束、默认值约束、检查约束和自动编号等重要概念。
初始数据表定义:
CREATE TABLE personal_info (
id INT PRIMARY KEY,
name VARCHAR(50),
gender VARCHAR(10),
birthdate DATE,
id_number VARCHAR(20),
phone VARCHAR(20),
email VARCHAR(50)
);
CREATE TABLE education (
id INT PRIMARY KEY,
degree VARCHAR(50),
major VARCHAR(50),
school VARCHAR(50),
start_date DATE,
end_date DATE
);
CREATE TABLE work_experience (
id INT PRIMARY KEY,
company VARCHAR(50),
position VARCHAR(50),
start_date DATE,
end_date DATE,
job_description VARCHAR(500)
);
CREATE TABLE skills (
id INT PRIMARY KEY,
skill_name VARCHAR(50),
proficiency VARCHAR(20)
);
CREATE TABLE languages (
id INT PRIMARY KEY,
language_name VARCHAR(50),
proficiency VARCHAR(20)
);
添加约束和自动编号:
CREATE TABLE personal_info (
id INT PRIMARY KEY IDENTITY(1,1),
name VARCHAR(50) NOT NULL,
gender VARCHAR(10) DEFAULT 'unknown',
birthdate DATE,
id_number VARCHAR(20) UNIQUE,
phone VARCHAR(20) UNIQUE,
email VARCHAR(50) UNIQUE
);
CREATE TABLE education (
id INT PRIMARY KEY IDENTITY(1,1),
degree VARCHAR(50),
major VARCHAR(50),
school VARCHAR(50),
start_date DATE,
end_date DATE CHECK (end_date >= start_date),
personal_info_id INT NOT NULL,
FOREIGN KEY (personal_info_id) REFERENCES personal_info(id)
);
CREATE TABLE work_experience (
id INT PRIMARY KEY IDENTITY(1,1),
company VARCHAR(50),
position VARCHAR(50),
start_date DATE,
end_date DATE CHECK (end_date >= start_date),
job_description VARCHAR(500),
personal_info_id INT NOT NULL,
FOREIGN KEY (personal_info_id) REFERENCES personal_info(id)
);
CREATE TABLE skills (
id INT PRIMARY KEY IDENTITY(1,1),
skill_name VARCHAR(50),
proficiency VARCHAR(20),
personal_info_id INT NOT NULL,
FOREIGN KEY (personal_info_id) REFERENCES personal_info(id)
);
CREATE TABLE languages (
id INT PRIMARY KEY IDENTITY(1,1),
language_name VARCHAR(50),
proficiency VARCHAR(20),
personal_info_id INT NOT NULL,
FOREIGN KEY (personal_info_id) REFERENCES personal_info(id)
);
解释:
- 个人信息表:
id:主键,自动编号。name:姓名,必填。gender:性别,默认值为'unknown'。birthdate:出生日期。id_number:身份证号码,唯一约束。phone:电话号码,唯一约束。email:邮箱地址,唯一约束。
- 教育表:
id:主键,自动编号。degree:学位。major:专业。school:学校。start_date:开始日期。end_date:结束日期,检查约束确保结束日期不早于开始日期。personal_info_id:外键,指向个人信息表,确保每个教育记录都与一个个人信息记录相关联。
- 工作经验表:
id:主键,自动编号。company:公司名称。position:职位。start_date:开始日期。end_date:结束日期,检查约束确保结束日期不早于开始日期。job_description:工作描述。personal_info_id:外键,指向个人信息表,确保每个工作经验记录都与一个个人信息记录相关联。
- 技能表:
id:主键,自动编号。skill_name:技能名称。proficiency:熟练程度。personal_info_id:外键,指向个人信息表,确保每个技能记录都与一个个人信息记录相关联。
- 语言表:
id:主键,自动编号。language_name:语言名称。proficiency:熟练程度。personal_info_id:外键,指向个人信息表,确保每个语言记录都与一个个人信息记录相关联。
通过这些约束,我们可以确保数据的一致性和完整性,并建立各个表格之间的关联关系。
原文地址: https://www.cveoy.top/t/topic/fYr1 著作权归作者所有。请勿转载和采集!