Базы данных
Создание: 24.03.2013
Предположим, вы скопировали список 250 лучших фильмов и сохранили его в текстовом редакторе. Можем ли мы считать этот массив данных базой данных?

Здравый смысл подсказывает, что нет. Мы ждем от базы данных возможности найти фильмы за определенный период, фильмы определенного режиссера, заданного жанра и т.д. Для того чтобы выполнять такой поиск – данные должны быть структурированы.

Терминология

Все БД (так далее будем называть базы данных) можно разделить на два вида иерархические и реляционные.

  иерархические реляционные
способ хранения по сути, это граф, например такой:
информация хранится в связанных таблицах
программная реализация дерево каталогов в менеджере файлов MS Access, dBase, mySQL и т.д
достоинства достаточно легко проектировать, изменять легко искать информацию
недостатки поиск затруднен трудно проектировать

Для хранения информации в компьютере используются реляционные БД. Далее будем говорить только о них.

Любая таблица содержит в себе:

  • запись (строки говорить некорректно) запись содержит в себе информацию об одном объекте, например информация об одном фильме.
  • поле (слово столбец, некорректно по отношению к БД) каждое поле содержит в себе фрагмент структурированной информации, например, год выхода фильма, название и т.д.
  • тип поля – так как информация в БД структурирована, в каждом поле может храниться информация заранее определенного типа: целое число, текст, дата, логическое да/нет и т.д.
  • Уникальное поле – в текстовую таблицу можно специально или случайно внести две записи с идентичной информацией, в БД это сделать невозможно. Две записи должны в обязательном порядке различаться, для этого, как правило в БД добавляют специальное числовое поле, задается системой самостоятельно, оно автоматически уведичивается при добавлении новой записи, гарантированно отличает одну запись от другой. Такое поле называют еще идентификатором, или сокращенно id.

Схема БД

Теперь можно записать структуру БД фильмотеки перечислить поля:

  1. id
  2. год выпуска (число)
  3. жанр (текст)
  4. название (текст)
  5. страна (текст)
  6. рейтинг (число)
  7. дополнительная информация (текст)
  8. режиссер (текст)
  9. актеры (текст)

И здесь можно заметить, что таблица, содержащая построенная по такой схеме перестает быть структурированной. В самом деле, если мы сможем сделать запрос, который отберет все фильмы определенного года, то в поле актеры может быть имя одного, а может и десяти актеров, а значит, поиск по ним сделать будеет затруднительно, да и информацию об одном режиссере можно написать по разному: Дж. Камерон, Джеймс Кэмерон, Кэмерон Джеймс и т.д. Для системы это будут разные режиссеры. Для того, чтобы структурировать данные одну таблицу разбивают на несколько, в которой каждая хранит информацию только об одном объекте.

режиссер

id (число)
имя (текст)
информация (текст)

актер

id (число)
имя (текст)
информация (текст)

связь фильм-актер

id (число)
id фильма (число)
id актера (число)

фильм

id (число)
жанр (текст)
название (текст)
id  режиссера (число)
и т.д.

Обратите внимание:

  • у режиссера Дж. Кэмерона будет только одна запись в таблицы режиссеры;
  • этой записи будет соответствовать какой-то уникальный идентификатор;
  • уникальный идентификатор режиссера может встретиться много раз в таблице фильм.

Для БД используют схемы, они описывают поля, типы полей и связи между таблицами.


Схема БД «Фильмотека»

между таблицами возможно три вида связей:

  • один ко многим – представлена н схеме, такой тип подразумевает что одна запись (режиссер) может встречаться в другой таблице многократно;
  • один к одному – одна запись фильм может иметь только одну запись в таблице рлдробная информация
  • многие ко многим – в БД практически не используются

Связь всегда организуется между полями с одинаковым типом данных число-число, например.

Описанная выше сама БД реализована в MS Access:

  • с помощью вкладки «Создать» добавлены четыре таблицы
  • в режиме конструктора для каждой таблицы заданы поля, типы, построены связи


создание таблиц в режиме конструктора

Обратите внимание:

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

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

Вопросы для повторения

  1. Сколько минимальное количество полей может быть в таблице?
  2. Сколько записей может быть в таблице?
  3. Каких полей не хватает в таблице фильмы, какие у них должны быть поля?
  4. Какие данные можно было вынести в отдельную таблицу?
  5. Предложите таблицу (название и список полей) которую можно связать отношением один к одному с таблицей фильмы.
  6. какие еще жизненные ситуации не описывает предложенная модель?

Объекты БД

Хранение в таблице «фильмы» идентификаторы режиссеров из связанной таблице уменьшает размер БД. Вот только заполнять таблицу становиться неудобно, необходимо помнить какой идентификатор соответствует каждому режиссеру.

(*) В MS Access есть возможность хранить идентификатор, но в таблицу подставлять текст из соответствующей таблицы. Эту особенность одной из программ пока оставим в стороне.

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


работать с данными в режиме таблицы неудобно

К счастью таблицы не единственный способ представления информации:

 
Объекты БД

1) Таблицы – объект, используемый для хранения данных.

2) Формы – удобный инструмент для добавления информации, а также просмотра информации.

Самый простой способ создания формы в MS Access – открыть таблицу на основе, которой создается новый объект, и во вкладке Вставка нажать на кнопку создать форму, для более сложных случаем необходимо воспользоваться конструктором:


конструктор форм

3) Запросы – в объекте хранится sql-запрос. При открытии объекта, запрос выполняется, и пользователь видит результат выполнения запроса.

Создавая запрос в «конструкторе» вы выбираете поля, которые хотите отобразить в запросе, выбираете условия отбора, групповые операции и пр.

 
Конструктор запросов. Выбираются 4 поля из двух таблиц, по полю рейтинг выбираются только записи, чье значение больше девяти.


Результат выполнения запроса

MS Access создаст sql-запрос самостоятельно и из синтаксис отличается от классического SQL:

SELECT фильм.название, фильм.жанр, режиссер.Имя, фильм.рейтинг
FROM режиссер INNER JOIN фильм ON режиссер.id = фильм.режиссер
WHERE (((фильм.рейтинг)>9));

SQL-запросам будет посвящен отдельная часть этого материала.

 4) Отчеты – это запрос, который формирует  данные для печати.

 

Сформированный отчет

Продолжение следует...