DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Проектирование таблиц

Таблицы
Напомню вам, что база данных – это набор файлов. Несмотря на то, что они хранятся на жестком диске, напрямую обратиться к ним нельзя. Вернее сказать, можно, но это приведет к порче информации. Доступ к информации в этих файлах обеспечивает программа-сервер базы данных. 
Каждый файл определенным образом размечен. Это делается с одной стороны для более эффективной работы программы-сервера, а с другой - для того, чтобы хранить разные данные отдельно друг от друга. Каждому логически обоснованному массиву информации нарезается участок памяти. В свою очередь он разбивается на ещё более мелкие участки – записи. Поскольку информация в массиве однородна, то записи имеют одинаковую структуру.
Рисунок 1. Таблица для представления массива данных.
Логически обоснованный массив информации наглядно можно представлять в форме таблицы. Строки таблицы – это записи. Несколько таблиц – это база данных.
У таблицы есть имя, колонки и строки. Имя нужно для того, чтобы можно было в базе данных отличить один массив информации от другого.
Шапка таблицы, или другими словами, список колонок - это всего лишь описание порядка следования значений в строке. Поскольку для каждой строки эта последовательность одна и та же, принято описывать структуру строк через определение колонок.
Для каждой колонки задаётся имя и тип данных. Основные типы: число, строка и дата. 
Количество колонок в таблице фиксировано, а строк может быть сколько угодно или не быть вовсе.

Таблицы для учебного примера
Рассмотрим форму счёта из учебного примера. Зададимся вопросом: "Сколько нужно таблиц для хранения информации из этого счёта в базе данных?" 
Явно не одна. 
Рисунок 2. Форма счёта на оплату товара.
Во-первых. У документа есть шапка и табличная часть. Уже как минимум две таблицы. 
Во-вторых. В табличной части, можно выделить строки с товарами и строки с услугами. Строки с товарами имеют номер по порядку, единицу измерения, цену, количество. Строки с услугами ничего этого не имеют. Колонки не заполнены. 
Получается, что для хранения счёта потребуется три таблицы: для шапки счёта, для строк с товарами, для строк с услугами.

Таблица для шапки счёта
Займемся таблицей для шапки счёта. Любая таблица имеет имя. Для этой тоже надо придумать. Пусть будет EXDOC. 
Рисунок 3. Таблица для шапки счёта.
Далее определяем колонки, которые будут в этой таблице. Берём шапку счёта и выписываем из неё поля. Обращаю внимание, что имя продавца пропущено. Значение во всех строках будет одно и тоже, а посему его можно не хранить. Зато включил в таблицу колонки с общими итогами по документу. Они пригодятся, когда будем изучать PL/SQL. 
Кстати, это достаточно удобно. Вот почему. Для расчёта общих итогов нужно будет обращаться и к таблице с товарами, и к таблице с услугами. Многократное обращение к таблицам можно избежать,  если в таблицу с шапкой счёта сейчас добавить колонки для хранения уже рассчитанных значений.
Перечень колонок составлен. Теперь каждой дадим имя, которое состоит из латинских букв. Укажем тип данных, которые будут в них храниться. В ORACLE есть следующие типы данных: для хранения чисел – NUMBER; для дат – DATE; для символьных строк - VARCHAR2.
Есть колонки для хранения целых чисел NUMBER(6) и для чисел с двумя знаками после запятой NUMBER( 12, 2). У колонок, которые хранят символьные данные, разная размерность. Имя покупателя должно быть меньше 60 символов. Адрес доставки должен не превышать 120. 

Таблицы для позиций с товарами и услугами.
Займёмся таблицей для позиций товаров.
Придумаем имя. Пусть будет EXPOS. Выпишем из формы счёта поля - будущие колонки. Каждой дадим имя. Внимательно рассмотрев форму счёта, для каждой колонки определяем тип данных. 
Для проверки можно заполнить таблицу данными из счёта.  
Рисунок 4. Таблица с позициями счёта.
Ответим на вопрос: "Как в этой таблице записать строки другого счёта?"
В форму будущей таблицы вписал данные другого счёта. Строки первого счёта выделим одним цветом, строки второго другим. Когда строки раскрашены, можно отделить строки одного счёта от другого. Но ORACLE не умеет раскрашивать записи в таблицах. Создав таблицу с таким набором колонок, не только ORACLE, но и мы сами, не сможем отделить строки одного счёта от другого. 
Рисунок 5. Таблица с позициями содержит данные двух счетов.
Вывод: цвет нужно заменить колонками. Добавим колонки с реквизитами счёта. Это "Номер счёта" и "Дата счёта". Имена колонок и тип данных берём из таблицы с шапками счетов EXDOC. Теперь можно сказать однозначно какому счёту принадлежит та или иная позиция.
Рисунок 6. Таблица с позициями с дополнительными колонками.
Осталась третья таблица. Строки для услуг.
С ней всё просто. Придумываем имя. Определяем колонки. Присвоим латинские имена колонкам. Указываем тип, размерность. Добавляем две колонки с реквизитами счёта. Они устранят неоднозначности,  обеспечат связь с таблицей счетов. 
Рисунок 7. Таблица с услугами.
Таблицы для учебного примера готовы. Пора переходить к практической части.
 









jAntivirus