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

通过这种结构,我认为您可以满足解释的需求

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 回答
0

我想您想创建事件详细信息,其中事件可以在一个或多个日期发生,每个日期可以完成一个或多个小时。

如果是这样,最好在“级联”中建立关系,其中甚至在 EVENT_DATE 中引用,进而将 even_date 与 even_time 相关联,从而消除表 even_time 中的日期字段

于 2013-01-07T02:04:20.397 回答