0

だから最初はこういうことを考えていました。

CREATE TABLE `events` (
    `event_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
    `event_name` VARCHAR(200),
    `date_added` DATETIME
    PRIMARY KEY(event_id)
);

CREATE TABLE `event_date` (
    `event_id` INTEGER UNSIGNED NOT NULL,
    `start_date` DATE,
    `end_date` DATE,
    FOREIGN KEY event_id REFERENCES events(event_id) ON DELETE CASCADE
);

CREATE TABLE `event_times` (
    `event_id` INTEGER UNSIGNED NOT NULL,
    `event_date` DATE,
    `start_time` TIME,
    `end_time` TIME,
    FOREIGN KEY event_id REFERENCES events(event_id) ON DELETE CASCADE
);

このスキーマを使用して、even_times.event_dateがevent_date.start_dateおよびevent_date.end_dateの範囲内にあることを確認することは可能でしょうか?

4

2 に答える 2

0

イベントの詳細を作成したいとします。イベントは1つ以上の日付で発生する可能性があり、各日付には1時間以上の完了があります。

その場合、EVENT_DATEで参照されていても、even_dateとeven_timeが関連付けられている「カスケード」で関係を確立し、テーブルeven_timeの日付フィールドを削除することが望ましいでしょう。

于 2013-01-07T02:04:20.397 に答える
0

この構造で、あなたは説明するニーズをカバーすると思います

CREATE TABLE events(
  event_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  event_name VARCHAR(200) DEFAULT NULL,
  date_added DATETIME DEFAULT NULL,
  PRIMARY KEY (event_id)
);

CREATE TABLE event_date(
  event_date_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  event_id INT(10) UNSIGNED NOT NULL,
  start_date DATE DEFAULT NULL,
  end_date DATE DEFAULT NULL,
  PRIMARY KEY (event_date_id),
  INDEX FK_event_date_events_event_id (event_id),
  CONSTRAINT FK_event_date_events_event_id FOREIGN KEY (event_id)
  REFERENCES events (event_id) ON DELETE CASCADE ON UPDATE RESTRICT
);

CREATE TABLE event_times(
  event_time_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  event_date_id INT(10) UNSIGNED NOT NULL,
  start_time TIME DEFAULT NULL,
  end_time TIME DEFAULT NULL,
  PRIMARY KEY (event_time_id),
  INDEX FK_event_times_event_date_event_date_id (event_date_id),
  CONSTRAINT FK_event_times_event_date_event_date_id FOREIGN KEY (event_date_id)
  REFERENCES event_date (event_date_id) ON DELETE CASCADE ON UPDATE RESTRICT
)

;

于 2013-01-07T12:08:34.147 に答える