Описание предметной области

Рассмотрим пример базы данных «Видеопрокат».

Пункт видеопроката осуществляет прокат записей фильмов на различных типах носителей: видеокассеты VHS, диски VCD и DVD; важно отметить, что как на одном носителе может находиться несколько фильмов (например, сборник мультфильмов на видеокассете), так и один фильм может быть записан на несколько отдельных носителей (одного типа). Клиентами являются физические лица.

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

· Клиент. Клиентов интересует, какие фильмы доступны в пункте видеопроката вообще, какие можно взять в данный момент.

· Сотрудник видеопроката. Сотрудник видеопроката работает с клиентами: выдает и принимает носители, а также записывает информацию о новых клиентов.

Выделение элементов данных по группам пользователей

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

 

1. Клиент:

1.1. Наименование фильма (1)

1.2. Продолжительность фильма (2)

1.3. Режиссер фильма (3)

1.4. Актеры, занятые в фильме (4)

1.5. Год выхода фильма в прокат (5)

1.6. Рента за сутки (10)

1.7. Тип носителя (9)

1.8. Дата выдачи носителя клиенту (12)

1.9. Дата возврата носителя (13)

2. Работник проката:

2.1. Наименование фильма (1)

2.2. Продолжительность фильма (2)

2.3. Режиссер фильма (3)

2.4. Актеры, занятые в фильме (4)

2.5. Год выхода фильма в прокат (5)

2.6. Метка носителя (7)

2.7. Время добавления информации о носителе (8)

2.8. Тип носителя (9)

2.9. Рента за сутки (10)

2.10. Дата порчи/потери носителя (11)

2.11. Дата выдачи носителя клиенту (12)

2.12. Дата возврата носителя (13)

2.13. ФИО клиента (14)

2.14. Адрес электронной почты клиента (15)

2.15. Контактный телефон клиента (16)

Сведем все в общий список со сквозной нумерацией:

1. Наименование фильма

2. Продолжительность фильма

3. Режиссер фильма

4. Актеры, занятые в фильме

5. Год выхода фильма в прокат

6. Идентификатор носителя

7. Метка носителя

8. Время добавления информации о носителе

9. Тип носителя

10. Рента за сутки

11. Дата порчи-потери носителя

12. Дата выдачи носителя клиенту

13. Дата возврата носителя

14. ФИО клиента

15. Адрес электронной почты клиента

16. Контактный телефон клиента

 

Неплохим способом проверить атомарность атрибутов является определение домена: множества значений, принимаемых атрибутом. Домен определяется типом данных и ограничениями, накладываемыми на множество возможных значений этого типа. В основном используются следующие типы данных: ЛОГИЧЕСКИЙ, ЧИСЛО, СТРОКА, ДАТА, ВРЕМЯ (современные СУБД так или иначе поддерживают все эти типы).

Атрибут №9 «Тип носителя» имеет строковый тип и содержит название типа носителя: «кассета VHS», «диск DVD» — возможно, в ходе дальнейшего технического прогресса он будет дополнен; фактически, домен этого атрибута состоит только из этих двух строк. Вообще говоря, при работе с БД необходимо иметь полный список точных значений этого атрибута в прикладной программе, что может представлять собой проблему и нарушать принцип независимости данных. Поэтому вводится новый атрибут №17 «Идентификатор типа носителя».

Атрибут №4 «Актеры, занятые в фильме», по всей видимости, нарушает свойство атомарности: в этом атрибуте предполагается наличие нескольких значений (имен актеров). Для решения проблемы достаточно удалить атрибут из списка и добавить вместо него атрибут «Актер». Однако база данных проектируется для предметной области «видеопрокат», а не, например, «фильмография», где каждый актер представляет собой отдельную сущность. В данном случае атрибут №4 содержит справочную информацию для клиента и не будет постоянно использоваться в запросах как критерий отбора записей.

Данный список не обязательно является полным. После некоторой практики проектировщик может сразу составить практически полный список атрибутов.