CREATE DATABASE rsgl CHARSET utf8;
USE rsgl;
/*车间表*/
CREATE TABLE workshop(
wsno CHAR(20) PRIMARY KEY COMMENT '车间编号',
wsname CHAR(20) COMMENT '车间名',
wsaddr CHAR(20) COMMENT '地址',
bfno CHAR(20) COMMENT '分厂编号',
sno CHAR(20) COMMENT '车间主任'
)CHARSET utf8;
/*职工表*/
CREATE TABLE staff(
sno CHAR(20) PRIMARY KEY COMMENT '职工号',
sname CHAR(8) COMMENT '职工姓名',
sex CHAR(2),
tel CHAR(13),
wsno CHAR(20),
FOREIGN KEY (wsno) REFERENCES workshop(wsno)
)CHARSET utf8;
/*为车间表添加外码约束,以表示车间与职工之间1:1联系*/
ALTER TABLE workshop
ADD
FOREIGN KEY (sno) REFERENCES staff(sno);
/*任务表*/
CREATE TABLE task(
tno CHAR(20) PRIMARY KEY COMMENT '任务编号',
tname CHAR(8) COMMENT '任务名',
tcontent TEXT COMMENT '任务内容'
)CHARSET utf8;
/* 奖励条例表*/
CREATE TABLE rewardregulation(
rno CHAR(20) PRIMARY KEY COMMENT '条例编号',
rname CHAR(20) COMMENT '条例名',
rcontent TEXT COMMENT '条例内容',
rstandard DECIMAL COMMENT '奖励金额标准'
)CHARSET utf8;
/*工作关系表*/
CREATE TABLE workerelation(
rno CHAR(20) ,
tno CHAR(20) ,
sno CHAR(20) ,
rewardmoney DECIMAL COMMENT '奖励金额',
rewarddate DATE COMMENT '奖励时间',
PRIMARY KEY(rno,tno,sno),
FOREIGN KEY (sno) REFERENCES staff(sno),
FOREIGN KEY (rno) REFERENCES rewardregulation(rno),
FOREIGN KEY (tno) REFERENCES task(tno)
)CHARSET utf8;
/*创建视图*/
CREATE VIEW vstaffreward
AS
SELECT staff.sno,sname,tname,rname,rstandard,rewardmoney,rewarddate
FROM staff,workerelation,rewardregulation,task
WHERE workerelation.tno=task.tno AND workerelation.rno=rewardregulation.rno AND workerelation.sno=staff.sno;
/*插入一个职工(职工号:123,姓名:ABC,性别:男,电话:138)*/
INSERT INTO staff (sno,sname,sex,tel)VALUES('123','ABC','男','138');
/*是否所有的表的外码设置都可以在创建表(create table)时一并完成?为什么?*/
有的不可以一次一并完成。
因为:
一般情况下1:1是把两个是实体的表合并,或各建一张表,把任意一方主码放到另一方;1:n两个实体各一张表,把1的主码放到多方。
两个实体有1:1又有1:n,就不能按1:1合并了,只能按1:n形成两张表,把1的主码加到n方解决1:n,再把n的主码加到1解决1:1。这样的话两张表主码互为另一张表的外码,建表时,有一个表外码在一开始建表时,就不能声明外码,需要另一个表建好后,再通过修改表添加外码方式完成。
企业人事管理
最新推荐文章于 2024-08-22 22:47:51 发布