2

SQL ステートメントに問題があります。

worker、HasSkill、HasTime の 3 つのテーブルがあります。HasSkill と HasTime には、Worker テーブルを指す外部キーがあります。

(私はその属性を主キーの一部として作成しました。また、w_id が Worker テーブルに存在しない場合は、挿入を制限したいと考えています)

以下は私のSQL文です。ただし、挿入制限は機能しません。誰かが私にアドバイスをくれることを願っています。どうもありがとう。

 1 CREATE TABLE IF NOT EXISTS Worker
  2 (
  3 id INTEGER NOT NULL AUTO_INCREMENT,
  4 name VARCHAR(30), 
  5 email VARCHAR(30), 
  6 address VARCHAR(255), 
  7 hour_rate INTEGER, 
  8 PRIMARY KEY(id)
  9 ); 
 10 
 11 CREATE TABLE IF NOT EXISTS HasSkill
 12 (
 13 w_id INTEGER NOT NULL, 
 14 skill_name VARCHAR(255), 
 15 PRIMARY KEY(w_id, skill_name), 
 16 FOREIGN KEY(w_id) REFERENCES Worker(id) ON DELETE CASCADE
 17 ); 
 18 
 19 CREATE TABLE IF NOT EXISTS HasTime
 20 (
 21 w_id INTEGER NOT NULL, 
 22 day_of_week TINYINT NOT NULL, 
 23 start_time  TIME NOT NULL, 
 24 end_time TIME NOT NULL, 
 25 PRIMARY KEY(w_id, day_of_week, start_time, end_time), 
 26 FOREIGN KEY(w_id) REFERENCES Worker(id) ON DELETE CASCADE
 27 );
4

2 に答える 2

0

@ビル・カーウィンに感謝します。

私はmysqlを使用しているので。

各 create ステートメントの最後に TYPE=InnoDB を追加します。

次のように:

CREATE TABLE IF NOT EXISTS HasTime
(
    w_id INTEGER NOT NULL, 
    day_of_week TINYINT NOT NULL, 
    start_time  TIME NOT NULL, 
    end_time TIME NOT NULL, 
    PRIMARY KEY(w_id, day_of_week, start_time, end_time), 
    FOREIGN KEY(w_id) REFERENCES Worker(id) ON DELETE CASCADE
) TYPE=InnoDB;

http://dev.mysql.com/doc/refman/5.6/en/storage-engines.htmlを参照してください

于 2013-03-20T01:29:08.820 に答える