ГЛАВА 6
CREATE (СОЗДАТЬ)
Вся информация в базе данных системы Paradox хранится в таблицах, которые состоят из записей (строк) и полей (столбцов). С помощью услуги Create (создать) можно создавать новые таблицы. Таблицы, полностью описываются вами; вы сами определяете типы их полей в точном соответствии с вашей информацией, которая будет в них храниться.
После того, как вы выберете услугу Create из Главного меню, Paradox попросит определить имя новой таблицы:
Table:
Enter new table name.
(Введите имя новой таблицы.)
Наберите имя новой таблицы и нажмите {Enter} (правила именования таблиц перечислены в разделе "Объекты системы Paradox" в главе 2). В рабочем поле появится образ, в котором можно определить структуру новой таблицы, описывая ее поля. (Поскольку образ, в котором вы работаете, является временной таблицей системы Paradox с именем struct, вы, на самом деле, используете одну таблицу для определения другой.) После того, как вы закончите описание таблицы, нажмите клавишу {F2} (выполнить), и Paradox создаст новую таблицу.
Если у вас есть опыт по созданию баз данных, вы почувствуете ту легкость, с которой Paradox позволит достичь стандартной, нормальной формы.
ОПИСАНИЕ СТРУКТУРЫ ТАБЛИЦЫ
Чтобы определить поля таблицы, заполните образ структуры таблицы. Для каждого поля нужно ввести его имя, тип поля и признак ключевого поля. Справочные описания основных типов полей расположены справа от образа структуры таблицы.
Вы можете редактировать вводимые вами значения, как любую другую таблицу системы (см. раздел "Редактирование" в главе 2 данного руководства).
Имена полей
В области, обозначенной Field Name (имя поля), наберите имена полей, длина которых не должна превышать 25 символов. Правила именования полей приведены в разделе "Объекты системы Paradox" в главе 2 данного руководства.
Типы полей
В области, обозначенной Field Type (тип поля), выберите тип поля, который определяет, какую информацию можно будет вводить в это поле. Допускаются следующие типы полей:
A - алфавитно-цифровое (1-255 символов)
N - числовое
$ - денежное
S - короткое целое
D - поле даты.
Эти типы (за исключением специального типа S) перечислены и кратко описаны в правой части экрана. Полная информация о типах полей содержится в разделе "Объекты системы Paradox" в главе 2 (Основные понятия).
Ключевые поля
Ключевые поля необходимы, чтобы идентифицировать записи. Хотя они, строго говоря, не являются необходимыми, ключ дает следующие преимущества:
- предотвращает появление повторяющихся значений в ключевом поле;
- сортирует записи таблицы по значениям ключевого поля;
- создает первичный индекс, с помощью которого может быть ускорена обработка запросов и другие операции.
Чтобы обозначить поле как ключевое, наберите звездочку (*) после типа этого поля. Ключевое поле должно быть первым полем таблицы.
Вы можете увидеть, как ключ предотвращает появление повторяющихся значений, если начнете редактировать таблицу, например сustomer (заказчик), в которой определено ключевое поле Cust ID (номер заказчика).
Представьте, что вы попытались добавить новую запись с номером заказчика 1386, который уже существует. Когда вы нажмете {F2} (выполнить), чтобы завершить редактирование, Paradox сообщит вам о совпадении ключей. Если вы хотите разрешить наличие повторяющихся записей в таблице, не используйте ключевое поле.
Аналогично можно убедиться, что при наличии ключа записи хранятся в отсортированном порядке. Добавьте новую запись в конец таблицы customer. Когда вы нажмете {F2} (выполнить), Paradox передвинет запись из конца таблицы в нужную позицию, в соответствии со значением в поле Cust ID.
Предел длины записи при наличии ключа составляет 1350 знаков (вместо 4000 для таблиц без использования ключевых полей).
Сложные ключи -------------
Ключ может состоять из нескольких полей таблицы; в этом случае он называется сложным или сцепленным ключом. Ключевые поля должны быть первыми полями в таблице в порядке, в котором вы хотите организовать ключ. Первое поле называется полем первичного ключа.
Записи в таблице со сложным ключом могут иметь повторяющиеся значения в некоторых из ключевых полей, но не во всех сразу. Когда таблица отсортирована, другие ключевые поля выступают как "си- то" для записей, которые имеют одинаковые значения первичных ключей.
МЕНЮ CREATE
При заполнении структуры таблицы вы можете в любой момент войти в меню Create (создать). Для этого нужно нажать клавишу {F10}. Меню содержит следующие услуги:
- Borrow (перенести): перенести структуру другой таблицы.
- Help (помощь): получить вспомогательную информацию об описании и редактировании структуры таблицы.
- DO-IT! (выполнить): создать таблицу в соответствии с описаниями, сделанными в образе структуры, и выйти в главное рабочее поле.
- Cancel (прервать): прервать создание таблицы и выйти в главное рабочее поле.
Borrow (перенести)
Если таблица, которую вы хотите создать, похожа на уже существующую таблицу, можете перенести всю структуру существующей таблицы или ее часть в создаваемую. Это избавит вас от необходимости набирать одну информацию дважды.
Чтобы перенести структуру из существующей таблицы в создаваемую, выполните следующие действия:
- Выберите услугу Create из Главного меню, наберите имя таблицы, которую вы хотите создать и нажмите {Enter}. На экране появится пустой образ структуры таблицы.
- Нажмите клавишу {F10}, чтобы войти в меню Сreate.
- Выберите услугу Borrow (перенести).
Paradox попросит указать имя таблицы, из которой вы хотите перенести структуру:
Table:
Enter name of table to borrow structure from, or press {Enter} for list of tables.
(Введите имя таблицы, структуру которой вы хотите перенести, или нажмите {Enter}, чтобы получить список таблиц.)
4. Наберите имя таблицы или выберите его из меню. Все имена по
лей, типы полей и ключевые поля (если они есть) из выбранной таблицы будут вставлены в новую структуру таблицы в позицию курсора (выше текущей записи).
5. Добавьте, удалите или измените поля в структуре, чтобы удов
летворить требованиям новой таблицы.
Вы можете перенести структуру из нескольких таблиц. При этом переносимые определения полей вставляются в новой таблице строго над позицией курсора.
Если вы вставляете структуру, содержащую ключевые поля, в середину существующей структуры, помните, что ключевые поля должны быть всегда первыми в таблице. Можно удалить признак ключевого поля (*) или изменить порядок расположения полей.
ОБЩИЕ ПРАВИЛА СОЗДАНИЯ ТАБЛИЦ
Планирование при создании таблицы всегда является первым шагом. Необходимо решить, какую информацию будет содержать таблица и как она будет размещена.
Хотя планирование - вещь очень важная, Paradox позволяет легко изменять структуры таблиц. Если после работы с таблицей вы решили добавить в нее новые поля или увидели, что существующее поле слишком маленькое, имеет неправильный тип или просто не нужно, то вы всегда можете изменить структуру таблицы. Для получения более подробной информации смотрите раздел "Изменение структуры" в главе 7.
При создании таблицы помните следующие общие правила:
- Учтите все. Постарайтесь включить поля для всей информации, с которой, по-видимому, вы будете работать. С другой стороны, постарайтесь не засорять таблицу полями для информации, которая вам не нужна. Помните, что вы всегда можете добавить или удалить поле в последствии.
- Не пытайтесь вместить всю информицию в одну таблицу. Обычно лучше создать несколько таблиц с несколькими полями, чем одну очень большую. Поскольку таблицы могут быть легко связаны вместе, с маленькими, простыми таблицами, как правило, легче работать, чем с таблицами, содержащими много полей.
- Храните информацию в том виде, в котором вам удобно. Часто бывает полезно создать таблицы, которые соответствуют уже используемой информации. Часто она может содержать файлы и формы, которые у вас есть на бумаге (например, файлы служащих или формы заказов).
- Создайте связи. Они устанавливаются с помощью соединения таблиц. Включите в таблицы общие поля, чтобы по ним можно было связывать таблицы (общие поля не обязательно должны иметь одинаковые имена).
- Избегайте избыточности. За исключением полей, служащих для связи таблиц, избегайте повторения информации в разных таблицах.
Структурируйте ваши таблицы
При разработке базы данных, подумайте сначала о классах объектов (людей, предметов), с которыми вы работаете.
Представьте, что вы - торговый директор национальной корпорации. Ваш рынок поделен на 4 района: восточный, центральный, южный и западный. Каждый район поделен на территории, которые включают от одного до трех штатов. Каждая территория представлена одним торговым представителем, который работает в районной конторе и подчиняется районному управляющему.
Как и у многих пользователей баз данных, у вас может возникнуть искушение поместить всю нужную информацию в одну большую таблицу.
Но если таблица содержит всю информацию, то для нее нелегко получить или изменить такую информацию, как рост продаж или изменение продаж в отделении. Например:
- Что случится, если вы найдете второго служащего по фамилии Milford? Как вы будете их различать?
- Предположим, что восточный район переместится с Бостона в Нью-Йорк. Вам нужно будет изменить адрес и номер телефона всех служащих и представителя в районе.
- Предположим, вы хотите знать, кто обслуживает клиентов в Арканзасе. Для начала придется вспомнить, как пишется аббревиатура штата АК или АR. Затем выполнить поиск по этому коду трижды для полей (State1, State2 и State3).
- Что произойдет, если в одну территорию потребуется включить 4 штата? Необходимо будет изменить структуру таблицы, чтобы включить поле State4.
- Представьте, что несколько торговых представителей увольняются. Как только сведения о них будут удалены из таблицы, вы удалите информацию о территориях, где они работали.
Вы могли убедиться, как неудобно может оказаться использование и ведение базы данных, организованной таким образом.
Проблема, которая возникла с таблицей, состоит в том, что она недифференцируема. Она содержит информацию о нескольких различных классах объектов: служащих, районах, территориях и штатах.
Вместо создания одной большой таблицы, вы можете создать несколько маленьких конкретных таблиц:
- employеe (служащий): содержит информацию о всех служащих, включая номер, имя, должность и зарплату;
- region (район): содержит код, название района, расположение конторы, номер телефона конторы и номер управляющего;
- terr (территория): различает территории по значению поля кода и показывает, в какой район она входит и какой торговый представитель ее представляет;
- state (штат): включает код штата, название штата и код территории, в которую входит штат.
Информация, которая раньше содержалась в таблице staff, теперь разделена на четыре маленьких, простых таблицы, с которыми намного удобнее работать. Если необходимо получить информацию, содержащуюся в нескольких таблицах, вы можете легко связать или соединить их вместе, используя мощные возможности системы Paradox по формированию запросов.
Заметим, что строки в каждой таблице имеют уникальные ключевые поля. Это позволяет избежать конфликтов в похожих записях и упрощает организацию связей между таблицами.
Рассмотрим, как эта база данных разрешает проблемы, с которыми мы столкнулись при работе с таблицей staff:
- Два служащих с фамилией Milford различаются по их номеру.
- Если восточный район сместился в Нью-Йорк, вы можете просто изменить одно значение расположения конторы и номер ее телефона в таблице region (район).
- Чтобы найти, кто работает в Арканзасе, соединим таблицы employee (служащий), state (штат) и terr (территория). Информацию о коде территории мы увидим из таблицы state, о коде представителя - из таблицы terr и фамилию представителя - из таблицы employеe.
- Если вы изменили границы территории, просто измените коды территории для нужных штатов в таблице state (штат).
- Разделение территории на штаты хранится в таблице state (штат) и не зависит от изменений в таблице employеe (служа- щий).
В кругу специалистов по базам данных такой способ разделения информации по таблицам называется нормализацией. Нормализованная таблица - маленькая, простая и содержит минимум избыточной информации. Каждое поле несет дополнительную и необходимую информацию. Изменения могут быть внесены очень легко.
Индивидуализация вашей базы данных
Организация вашей базы данных должна отражать стиль и характер вашей работы. То, что подходит для вас, может не подойти для кого-нибудь другого.
Представьте, что зарплата ваших служащих целиком определяется их должностью: торговый представитель получает 36.000$ в год, все старшие торговые представители - 42.000$, все управляющие - 48.000$ и т.д. В случае, аналогичном приведенному, не нужно хранить поле Salary (зарплата) в таблице employеe (служащий), как в примере выше, поскольку зарплата связана с должностью служащего, а не с каждым конкретным служащим. Рассмотрим потенциальные проблемы:
- Если вы увеличили зарплату управляющим, нужно изменить зарплату для каждого управляющего в таблице employеe (служащий).
- Представьте, что все торговые представители повышены в старшие представители, и в таблице employеe (служащий) не осталось больше торговых представителей. Если вы после этого приняли на работу новых торговых представителей, в базе данных не останется информации о том, какой должна быть их зарплата.
В качестве решения предлагается разместить информацию о зарплате в отдельной таблице salary (зарплата), в которой будут два поля: Position (должность) и Salary (зарплата). Чтобы найти зарплату служащего, вы можете соединить таблицы employеe и salary с помощью yказав пример в поле Position в обеих таблицах. Если вы повысите всех торговых представителей, то зарплата для этой должности не исчезнет, она будет храниться в таблице salary (зарпла- та).
СОЗДАНИЕ ТАБЛИЦ В СЕТИ
В сети Paradox автоматически накладывает полную блокировку на создаваемую вами таблицу. Это означает, что больше никто не сможет создать или переименовать таблицу с тем же именем, пока вы не закончите создание вашей таблицы.
Если вы переносите структуру из другой таблицы, то на эту таблицу будет кратковременно наложена предохраняющая полная блокировка. Вы не сможете перенести структуру из таблицы, если другой пользователь наложил на эту таблицу полную блокировку.
| <<
| <
| >
| >>
| Содержание |