完了したジョブとこれらのジョブの事務処理のステータスを追跡するアプリの作成を設計しようとしています。次の形式のデータベース (MySQL) が必要です。
5 つのテーブル:
- 仕事
- クルー(仕事をする人)
- 店舗(現場で行う仕事)
- ステータス(書類は届いていますか?)
- コメント(連絡とメモ)
以下は、テーブルの関連付け方法です。
- 1 人の乗組員は多くの仕事を持つことができますが、1 つの仕事は多くの乗務員を持つことはできません (1 対多)。
- 1 つの店舗で複数のジョブを持つことができますが、1 つのジョブで複数の店舗を持つことはできません (1 対多)
- ステータスはジョブに属します (1 対 1)
- コメントはジョブに属します (1 対 1)
制約:
- 店がなければ仕事は成り立たないし、スタッフがいなければ成り立たない
- コメントとステータスは、ジョブなしでは存在できません
私の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: 外部キーについて少し混乱しています。「ストア」を指す「ジョブ」に外部キーを追加すると、「ジョブ」は「ストア」に属する子テーブルになりますか? それとも逆ですか?
ありがとうございました。