给出数据:
(1)Employee表
列名 | 数据类型 | 长度 | 是否允许为空 | 说明 |
EmployeeID | Char | 4 | 否 | 员工编号,主键 |
Name | Char | 10 | 否 | 姓名 |
Birthday | Date | 3 | 否 | 出生日期 |
Sex | Bit | 1 | 否 | 性别 |
Address | Char | 20 | 是 | 地址 |
Zip | Char | 6 | 是 | 邮编 |
PhoneNumber | Char | 12 | 是 | 电话号码(唯一) |
EmailAddress | Char | 30 | 是 | 电子邮件地址(唯一) |
DepartmentID | Char | 3 | 否 | 员工部门号,外键 |
(2)Departments表
列名 | 数据类型 | 长度 | 是否允许为空 | 说明 |
DepartmentID | Char | 3 | 否 | 员工部门号,主键 |
DepartmentName | Char | 20 | 否 | 部门名(唯一) |
Note | Text | 16 | 是 | 备注 |
(3)Salary表
列名 | 数据类型 | 长度 | 是否允许为空 | 说明 |
EmployeeID | Char | 4 | 否 | 员工编号,外键, 主键 |
Income | Float | 8 | 否 | 收入 |
OutCome | Float | 8 | 否 | 支出 |
Sdate | Date | 3 | 否 | 主键 |
3. 对以上建立的3个表输入如下数据:
Departments表:
DepartmentID | DepartmentName | Note |
1 | 财务部 | 财务部 |
2 | 研发部 | 研发部 |
3 | 人力资源部 | 人力资源部 |
Employee表:(性别“1”表示女,性别“0”表示男,)
EmployeeID | Name | Birthday | Sex | Address | Zip | PhoneNumber | EmailAddress | DepartmentID |
1001 | 李勇 | 1978-3-12 | 0 | 河南郑州 | 475001 | 3880378 | 1 | |
1002 | 王敏 | 1980-11-2 | 1 | 河南新乡 | 475002 | 0378311 | 1 | |
1003 | 刘晨 | 1978-6-22 | 0 | 北京 | 475003 | 0378322 | 1 | |
1004 | 周宏 | 1983-10-3 | 1 | 河北廊坊 | 475004 | 7865987 | zh@ henu.edu.cn | 1 |
2001 | 张立 | 1998-8-1 | 0 | 北京 | 475005 | 0378333 | 2 | |
2002 | 刘毅 | 1988-1-23 | 0 | 江苏南京 | 475006 | 0378344 | 2 | |
2003 | 张玫 | 1981-3-15 | 1 | 陕西西安 | 475007 | 0378355 | 2 | |
2004 | 王军 | 1979-5-12 | 0 | 山东威海 | 475008 | 5687967 | 2 | |
3001 | 徐静 | 1990-8-12 | 1 | 山东青岛 | 475009 | 0378366 | 3 | |
3002 | 赵军 | 1979-2-19 | 0 | 陕西榆林 | 475010 | 0378377 | 3 | |
3003 | 王霞 | 1982-8-18 | 1 | 陕西延安 | 475011 | 7556677 | 3 |
Salary表:
EmployeeID | Income | OutCome | Sdaate |
1001 | 3600 | 1500 | 2020-01-01 |
1002 | 3300 | 1000 | 2020-01-01 |
1001 | 3700 | 1200 | 2020-02-01 |
1002 | 4500 | 1600 | 2020-02-01 |
2001 | 4000 | 1600 | 2020-01-01 |
2002 | 3800 | 1800 | 2020-01-01 |
2003 | 3800 | 1500 | 2020-01-01 |
2004 | 5100 | 1800 | 2020-01-01 |
3001 | 4200 | 2000 | 2020-03-01 |
3002 | 4100 | 1800 | 2020-03-01 |
3003 | 4600 | 1400 | 2020-03-01 |
实现代码:
CREATE DATABASE s2131051217
USE TEST
CREATE TABLE Departments
(DepartmentID CHAR(3) PRIMARY KEY not null,
/* 员工部门号,主键*/
DepartmentName CHAR(20) UNIQUE not null, /* 部门名(唯一)*/
Note TEXT /* 备注*/
);
CREATE TABLE Employee ( EmployeeID CHAR(4) PRIMARY KEY not null, /*员工编号,主键*/
Name CHAR(10) not null, /*姓名*/
Birthday DATE not null, /*出生日期*/
SEX BIT not null, /*性别*/
Address CHAR(20), /*地址*/
Zip CHAR(6), /*邮编*/
PhoneNumber CHAR(12) UNIQUE, /*电话号码(唯一)*/
EmailAddress CHAR(30) UNIQUE not null,/*电子邮件地址(唯一)*/
DepartmentID CHAR(3) FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID),/*员工部门号,外键*/
);
CREATE TABLE Salary
(EmployeeID CHAR(4) not null,
/* 员工编号,外键, 主键*/
Income Float(8) not null, /* 收入*/
OutCome Float(8) not null, /* 支出*/
Sdate Date not null, /*主键*/
PRIMARY KEY(EmployeeID,Sdate),
FOREIGN KEY (EmployeeID) REFERENCES Employee(EmployeeID)
);
insert into Departments values
('1','财务部','财务部'),
('2','研发部','研发部'),
('3','人力资源部','人力资源部');
insert into Employee values
('1001','李勇','1978-3-12','0','河南郑州','475001','3880378','ly@henu.edu.cn','1'),
('1002','王敏','1980-11-2','1','河南新乡','475002','0378311','wm@henu.edu.cn','1'),
('1003','刘晨','1978-6-22','0','北京','475003','0378322','lc@henu.edu.cn','1'),
('1004','周宏','1983-10-3','1','河北廊坊','475004','7865987','zh@ henu.edu.cn','1'),
('2001','张立','1998-8-1','0','北京','475005','0378333','zl@henu.edu.cn','2'),
('2002','刘毅','1988-1-23','0','江苏南京','475006','0378344','lyy@henu.edu.cn','2'),
('2003','张玫','1981-3-15','1','陕西西安','475007','0378355','zm@henu.edu.cn','2'),
('2004','王军','1979-5-12','0','山东威海','475008','5687967','wj@henu.edu.cn','2'),
('3001','徐静','1990-8-12','1','山东青岛','475009','0378366','xj@henu.edu.cn','3'),
('3002','赵军','1979-2-19','0','陕西榆林','475010','0378377','zj@henu.edu.cn','3'),
('3003','王霞','1982-8-18','1','陕西延安','475011','7556677','wx@henu.edu.cn','3');
insert into Salary values
('1001','3600','1500','2020-01-01'),
('1002','3300','1000','2020-01-01'),
('1001','3700','1200','2020-02-01'),
('1002','4500','1600','2020-02-01'),
('2001','4000','1600','2020-01-01'),
('2002','3800','1800','2020-01-01'),
('2003','3800','1500','2020-01-01'),
('2004','5100','1800','2020-01-01'),
('3001','4200','2000','2020-03-01'),
('3002','4100','1800','2020-03-01'),
('3003','4600','1400','2020-03-01');
遇到问题:
在建表的过程中,我发现一个表中不能同时有两个主键,但是有时候,一个主键往往是没有办法确定它的唯一性的,所以这时候,我们就可以设置一个或者多个联合主键,就可以解决这样的问题。
在录入数据时,我曾遇到了两个问题:
①问题分析:在输入职员的发放工资日期时,编译器报错:违反了PRIMARY KEY 约束”PK_Salary_E25911A67ED375E5",不能在对象"dbo.Salary"中插入重复键。重复键值为 (2020-01-01).
解决问题:没有将联合主键弄好,导致输入主键相关数据时出现问题。
②问题分析:在输入职员的工资时,由于我输入有误,我在建表时将工资设置为唯一值,导致2003号员工张玫的工资也为3800时,就会出现错误。
解决问题:最后我想工资按理来说是可以重复的,后来我又对照作业里的数据表,才改正了我的错误,将工资那一列UNIQUE这一约束条件删除。