我正在尝试设计创建一个应用程序,该应用程序应该跟踪已完成的工作和这些工作的文书工作状态。它需要以下格式的数据库(MySQL):
5张桌子:
- 工作
- 船员(执行工作的人)
- 商店(在地点执行的工作)
- 状态(是否收到文件?)
- 评论(沟通和笔记)
以下是表应如何关联:
- 一个工作人员可以有很多工作,一份工作不能有很多工作人员(一对多)
- 一个商店可以有很多工作,一份工作不能有很多商店(一对多)
- 状态属于工作(一对一)
- 评论属于工作(一对一)
约束:
- 工作不能没有商店,也不能没有工作人员
- 没有工作就不能存在评论和状态
我的 sql:
USE ppwk;
CREATE TABLE store (
id INT(11) AUTO_INCREMENT PRIMARY KEY,
account VARCHAR(3) NOT NULL,
secondary_account VARCHAR(64),
number VARCHAR(11) NOT NULL,
address VARCHAR(64),
address2 VARCHAR(64),
city VARCHAR(64),
state VARCHAR(2),
zip VARCHAR(12),
phone VARCHAR(14)
);
CREATE TABLE crew (
crew_code VARCHAR(6) PRIMARY KEY NOT NULL,
address VARCHAR(64),
address2 VARCHAR(64),
city VARCHAR(64),
state VARCHAR(2),
zip VARCHAR(12),
phone VARCHAR(14),
phone2 VARCHAR(14),
phone3 VARCHAR(14),
phone4 VARCHAR(14),
fax VARCHAR(14),
email VARCHAR(64)
);
CREATE TABLE job (
work_order INT(6) PRIMARY KEY NOT NULL,
svc_date DATE NOT NULL,
resvc_date DATE,
level VARCHAR(2),
description TEXT,
store_id INT(11),
crew_code VARCHAR(6),
FOREIGN KEY (store_id) REFERENCES store(id),
FOREIGN KEY (crew_code) REFERENCES crew(crew_code)
);
CREATE TABLE status (
work_order INT(6) PRIMARY KEY,
status VARCHAR(64) NOT NULL,
added_on DATETIME,
closed_on DATETIME,
FOREIGN KEY (work_order) REFERENCES job(work_order)
ON UPDATE CASCADE
ON DELETE CASCADE
);
CREATE TABLE comment (
id INT(11) PRIMARY KEY AUTO_INCREMENT,
work_order INT(6),
act_comment TEXT,
clr_comment TEXT,
act_last_updated DATETIME,
clr_last_updated DATETIME,
INDEX (work_order),
FOREIGN KEY(work_order) REFERENCES job(work_order)
ON UPDATE CASCADE
ON DELETE CASCADE
);
问题1:这个sql是否完全符合我的要求?
问题2:我对外键有点困惑。如果我将外键添加到指向“商店”的“工作”,它是否会将“工作”变成属于“商店”的子表?或者是周围的其他方式?
谢谢你。