Добрый день!
Подскажите начинающему как правильно спроектировать БД:
есть таблица с данными о событиях\авариях, одно событие соответствует одному источнику(host), один источник может состоять в нескольких группах и перемещаться между группами.
tblevent: {id, time_start, time_end, name, type, hostid}
tblhost: {id, hostname, groupid}
tblgroup: {id, groupname}
По событиям будет считаться доступность(SLA) в разрезе групп. Как правильно будет связать события с группами? Вижу следующие варианты:
1. Создать таблицу соответствия между событием и группами tblevent2group: {eventid, groupid}, в этом случае как правильно будет выбрать события за период по группе? Одним запросом вытаскивать все события по группе из tblevent2group, а следующим вытаскивать события из tblevent и фильтровать их по времени?
2. В tblhost добавить поля и хранить историю перемещения хоста между группами tblhost: {id, hostid, hostname, date_start, date_end, groupid}
3. в таблицу tblevent добавить поле в котором будут перечислены id групп к которым оно относится, но тогда как правильно будет написать запрос для выборки событий по одной группе?
Заранее благодарен за ответы
какие-то бессвязные варианты
если к группе принадлежит источник, то почему таблица-связка между событиями и группами напрямую?
При чем здесь история? Так надо её хранить или не надо? И как ее наличие связано с остальными выборками?
про "перечислить через запятую" - этот ужас без комментариев. но опять же, почему связка события группы, а не события-хосты? Хосты тут в этой схеме вообще каким боком?
По описанию задачи должна быть связка событий с хостами многие ко многим
за период выбирать обычно - джойнами.
джойним хосты к группам, связку к хостам, и события к связке
и добавляем условия, какие нужно - по дате и группе