Помощь в моделировании ER-диаграммы - PullRequest
2 голосов
/ 13 октября 2010

Я пытаюсь смоделировать следующие 2 предложения в диаграмме ER:

У каждой компании есть набор танков.Для каждого резервуара также известно, насколько он заполнен для каждого времени суток.

Неизвестно, существуют ли конкретные дни дня, для которых имеются журналы.Это может быть один раз в день, дважды, каждый час, может быть, в некоторые дни у вас нет никакой информации и т. Д.

Это моя текущая попытка: alt text

(Я забыл вставить в ассоциацию Tanks / Dates атрибут под названием «текущая нагрузка»)

Хотя по какой-то причине он мне не нравится (наверное, мне не нравится объект Dates!).Как вы, ребята, обычно моделируете такие ситуации?

Я думаю, что вместо этого я мог бы иметь TankLoads сущность с атрибутом «Load» и другим атрибутом в ассоциации под названием «Date».

Спасибо

PS: Простите за дерьмовую диаграмму DIA: (

Ответы [ 3 ]

2 голосов
/ 13 октября 2010

Моделирование данных и проектирование базы данных - это не одно и то же, хотя люди часто используют диаграммы ER для обобщения схем базы данных.

Нет ничего «нереального» в дате или метке времени, состоящей из даты и времени.Тот факт, что они являются абстракциями, не имеет большого значения.Банковский счет такой же абстрактный.

Если у вас будет таблица дат или отметок времени, это отдельная история.На практике я обнаружил, что очень полезно иметь таблицу, которая каталогизирует каждую дату или каждую рабочую смену в базах данных отчетов.При наличии соответствующих атрибутов упрощается создание отчетов, которые еженедельно, ежемесячно, ежеквартально или ежегодно, даже если у предприятия имеется собственный причудливый финансовый календарь.Некоторые атрибуты могут быть избыточными с функциями, встроенными в SQL, но даже в этом случае это относительно несущественное проектное решение.

1 голос
/ 13 октября 2010

alt text

0 голосов
/ 13 октября 2010

Хм, я бы сделал это немного по-другому. Поместите все даты / время в отдельную таблицу (сейчас я назвал ее Даты, но вы также можете назвать это время или временные метки или около того) и много-много-много их с Танками. (Я использовал таблицу FillLevels.)

Уровень заполнения бака сохраняется в таблице FillLevels.

Компания:
- [...]

Танки:
- company_id: int
- [...]

FillLevels:
- tank_id: int
- time_id: int
- [...]

Сроки:
- [...]

Прошу прощения за то, что у вас нет блестящей диаграммы для вас, но у меня дома это имеет смысл.

Кроме того, вы можете создать поле DateTime в таблице FillLevels вместо таблицы Dates, в зависимости от того, как вы собираетесь запрашивать базу данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...