1

我正在尝试设计创建一个应用程序,该应用程序应该跟踪已完成的工作和这些工作的文书工作状态。它需要以下格式的数据库(MySQL):

5张桌子:

  1. 工作
  2. 船员(执行工作的人)
  3. 商店(在地点执行的工作)
  4. 状态(是否收到文件?)
  5. 评论(沟通和笔记)

以下是表应如何关联:

  • 一个工作人员可以有很多工作,一份工作不能有很多工作人员(一对多)
  • 一个商店可以有很多工作,一份工作不能有很多商店(一对多)
  • 状态属于工作(一对一)
  • 评论属于工作(一对一)

约束:

  1. 工作不能没有商店,也不能没有工作人员
  2. 没有工作就不能存在评论和状态

我的 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:我对外键有点困惑。如果我将外键添加到指向“商店”的“工作”,它是否会将“工作”变成属于“商店”的子表?或者是周围的其他方式?

谢谢你。

4

1 回答 1

1

模型

只要存在 Store 和 Crew,您就可以创建新工作。

CREATE TABLE JOB (
IDJOB CHAR(20) NOT NULL, 
IDCREW CHAR(20) NOT NULL, 
IDSTORE CHAR(20) NOT NULL,
PRIMARY KEY (IDJOB,IDCREW,IDSTORE)) 
TYPE = MYISAM
ROW_FORMAT = DEFAULT;

CREATE TABLE CREW (
IDCREW CHAR(20) NOT NULL,
PRIMARY KEY (IDCREW)) 
TYPE = MYISAM
ROW_FORMAT = DEFAULT;

CREATE TABLE STORE (
IDSTORE CHAR(20) NOT NULL,
PRIMARY KEY (IDSTORE)) 
TYPE = MYISAM
ROW_FORMAT = DEFAULT;

CREATE TABLE STATUS (
IDSTATUS CHAR(20) NOT NULL,
PRIMARY KEY (IDSTATUS)) 
TYPE = MYISAM
ROW_FORMAT = DEFAULT;

CREATE TABLE COMMENT (
IDCOMMENT CHAR(20) NOT NULL,
PRIMARY KEY (IDCOMMENT))
TYPE = MYISAM
ROW_FORMAT = DEFAULT;
于 2013-08-30T18:52:02.070 回答