Статьи Королевства Дельфи


Моделирование данных - часть 2


Если по условиям задачи необходимо группировать по датам таблицы из миллионов записей, то избыточные поля превратятся в заметный фактор, влияющий на скорость исчерпания дискового пространства, и в этом случае есть смысл создать отдельную таблицу для хранения всех значимых дат: DATE_ID - идентификатор даты (не дата!) YEAR - год QUARTER - квартал MONTH - месяц DAY - день в месяце DAY_OF_WEEK - день недели

DATE_ID - это не дата, а абстрактный номер даты (суррогатный ключ), на который будут ссылаться записи из других таблиц. На первый взгляд, хочется в качестве ключа использовать собственно дату, однако у такого решения есть определенный недостаток: в этом случае появляется соблазн интерпретировать эту дату в клиентских приложениях (а не пользоваться атрибутами YEAR, MONTH, DAY и пр.) и тем самым увеличить риск семантической рассогласованности приложений.

В схеме с отдельной таблицей для значимых дат очень важно реализовать единый централизованный и надежный механизм начального заполнения и последующего пополнения этой таблицы: вам придется хранить именно все значимые даты, иначе вы рискуете потерять часть данных - записи с не сохраненной в таблице дат датой будут исключены из результатов запроса. Эту проблему можно решить, введя специальное значение date_id для не установленной даты (хоть тот же «0»), и установив его в качестве значения по умолчанию для всех полей date_id. В таблице дат также нужно ввести запись с соответствующим ключом, которая будет содержать заведомо бессмысленные значения атрибутов.

Движение материалов

Задача о движении материалов на предприятии встречается очень часто. Движение заключается в том, что некоторое количество определенного материала изменяет свое состояние, например, товар был в пути, затем его разгрузили, потом оприходовали на склад. Таким образом, когда регистрируется движение, то обычно записывается исходное состояние материала, идентификатор и количество материала, результирующее состояние и, наконец, время совершения операции. Очевидное решение - создать для движений таблицу OPERATIONS, где каждой операции перемещения будет соответствовать одна строка со следующими полями: NO - номер операции DATE - дата TIME - время MATERIAL - идентификатор материала QUANTITY - количество SOURCE_STATE - исходное состояние DEST_STATE - результирующее состояние




Начало  Назад  Вперед



Книжный магазин