Как я могу настроить схему базы данных, в которой существует два одновременных отношения "много-много"?

Мне нужна таблица, чтобы зафиксировать время простоя, в основном, событие простоя содержит следующую информацию:
EVENT_ID, START_TIME, END_TIME, УСЛУГИ, ПРИЧИНЫ

Основная проблема в том, что я не Я не знаю, как это настроить, потому что не хочу, чтобы в итоге случился такой беспорядок:

ID  |  EVENT_ID  |  START_TIME  |  END_TIME  | SERVICES  |  CAUSES
01          455       12:00          12:30      FINANCE     NETWORK
02          455       12:00          12:30      ADVANCE     NETWORK
...
13          455       12:00          12:30      REFRESH     DATABASE

В основном ... для одного сбоя у меня было бы много записей в таблице, поскольку, если есть несколько служб / причин, таблица фактически будет содержать все комбинации.

Есть ли более эффективный способ организовать это?


person antonpug    schedule 08.03.2012    source источник


Ответы (1)


да - нормализовать немного:

EVENT
------
event_id
start_tm
end_tm
description

EVENT_SERVICE
-------------
event_id
service_id
employee_id 
start_tm
end_tm
(other info as needed)

SERVICE
---------
service_id
description

CAUSE
-------
cause_id
description

EVENT_CAUSE
-----------
event_id
cause_id

отредактировано, чтобы отразить комментарий ypercubes в отдельной таблице SERVICE

person Randy    schedule 08.03.2012
comment
Нет ли SERVICE таблицы? - person ypercubeᵀᴹ; 09.03.2012
comment
Хм, а как они связаны между собой? Например, как основная таблица СОБЫТИЙ связана со списком услуг и причин? Также таблица EVENT_CAUSE будет довольно повторяющейся, потому что в ней будет перечислено несколько причин для одного идентификатора события? - person antonpug; 09.03.2012
comment
@ypercube - да, ЕСЛИ бы сервисы были повторяемыми ... тогда шаблон был бы таким же (как вы знаете) как СОБЫТИЕ - person Randy; 09.03.2012
comment
@antonpug главное событие получает уникальный event_id в качестве первичного ключа, затем в EVENT_SERVICE вы называете этот event_id внешним ключом, что позволяет выполнять множество сервисов для каждого события. - person Randy; 09.03.2012