Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Робота з PostgreSQL ВТиП.doc
Скачиваний:
52
Добавлен:
17.03.2016
Размер:
4.82 Mб
Скачать
    1. Определения первичного ключа таблицы

Для определения первичного ключа таблицы необходимо выбрать закладку Ограничения окна Новая таблица (рисунок 2.12).

Рисунок 2.12 – Закладка Ограничения окна Новая таблица

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

Чтобы создать первичный ключ нужно на вкладке Ограничения выбрать тип ограничения Первичный ключ и нажать кнопку Добавить. В результате откроется окно Новый первичный ключ (рисунок 2.13).

Для таблицы Students первичным ключом является колонка StId - искусственный ключ, который принято называть ID записи.

Рисунок 2.13 – Окно Новый первичный ключ

Здесь на закладке Свойства следует указать – свойство первичного ключа – его имя, которое для удобства может состоять из имени колонки и символов PK (от англ. Primary Key – первичный ключ). Это имя, например StIdPK, используется при проектировании БД в PgAdmin III.

На закладке Колонки (рисунок 2.14) из выпадающего списка нужно выбрать необходимую колонку (для примера это StId), и нажать на кнопку Добавить. По завершению следует нажать кнопку ОК. Это имя, например StId, используется при написании запросов к БД.

а) – Закладка Колонки окна Новый первичный ключ

б) Закладка Ограничения с первичным ключом

Рисунок 2.14 – Закладки окна Таблица Students при создании первичного ключа

Соответствующий запрос создания новой таблицы можно посмотреть на закладке SQL (рисунок 2.15).

Рисунок 2.15 – Текст запроса на закладке SQL окна Новая таблицы

Аналогичным образом создаются и остальные таблицы БД.

    1. Особенности первичных ключей в PostgreSql

Сразу следует подчеркнуть, что независимо от ситуации хорошей практикой является использование в качестве ключа дополнительного поля ID типа serial.

Работа с первичными ключами в PostgreSql имеет ряд особенностей. Мы рассмотрим некоторые из них.

Следует подчеркнуть, что в PostgreSql первичный ключ может быть представлен только в виде 1-ного поля. Таким образом, PostgreSql явно не поддерживает составные ключи. Такой ключ должен быть локализован с помощью дополнительного поля ID квази типа serial, а поля, образующие составной ключ, должны не допускать значение NULL.

Если желательно, чтобы ключ был представлен реальным полем, то везде, где это возможно тип поля следует выбирать строковым, например, Номер зачетной книжки студента, хоть он и выглядит как целое число. Однако практика показала, что в тех случаях, когда в качестве первичного ключа таблицы выступают строковые данные, например Фамилия, лучше использовать искусственный первичный ключ - ID, создав дополнительную колонку и определив тип ее элементов как serial. Это сократит затраты при работе с несколькими склеиваемыми таблицами (см. ниже).

Если же ключ представить с типом поля integer, то при попытке ввода из программного приложения новой записи возникнут конфликты с PostgreSql.

Следует подчеркнуть, что при переносе БД из некоторой СУБД, например Access, в PostgreSql тип данных полей, аналогичных AUTO_INCREMENT, преобразуется в тип integer, что приводит к проблемам при добавлении новых данных. Если перепроетирование БД с вводом новых полей типа serial не представляется целесообразным, что обычно имеет место, то следует выполнить замену типа таких полей с integer на serial.

Однако прямая замена типа поля integer на тип serial в свойствах поля в PgAdmin III недоступна.

Для перевода в PgAdmin III типа поля integer в serial или bigserial следует сначала для требуемого ключевого поля таблицы создать последовательность (Sequence), в которой задать закон приращения значений последовательности. Имя последовательность формируется, как правило по схеме “таблица_колонка_seq”. Для таблицы Groups получим Groups_GrNo_seq.

Рисунок 2.16 – Настройка новой последовательности

Эта последовательность сохраняется.

Рисунок 2.17 – Сохраненные последовательности

Далее формируем SQL-запрос на изменение типа

ALTER TABLE "Groups"

ALTER COLUMN "GrNo" SET DEFAULT nextval('"Groups_GrNo_sec"')

и выполняем его (рисунок 2.18)

Рисунок 2.18 – Сохраненные последовательности

Теперь в свойствах колонки можно увидеть, что задано значение по умолчанию (рисунок 2.18)

Рисунок 2.19 – В поле Значение по умолчанию задана требуемая последовательность