1

完了したジョブとこれらのジョブの事務処理のステータスを追跡するアプリの作成を設計しようとしています。次の形式のデータベース (MySQL) が必要です。

5 つのテーブル:

  1. 仕事
  2. クルー(仕事をする人)
  3. 店舗(現場で行う仕事)
  4. ステータス(書類は届いていますか?)
  5. コメント(連絡とメモ)

以下は、テーブルの関連付け方法です。

  • 1 人の乗組員は多くの仕事を持つことができますが、1 つの仕事は多くの乗務員を持つことはできません (1 対多)。
  • 1 つの店舗で複数のジョブを持つことができますが、1 つのジョブで複数の店舗を持つことはできません (1 対多)
  • ステータスはジョブに属します (1 対 1)
  • コメントはジョブに属します (1 対 1)

制約:

  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

モデル

ストアとクルーが存在する限り、新しいジョブを作成できます。

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 に答える