Здавалка
Главная | Обратная связь

Проблемы переноса БД из некоторой СУБД в СУБД 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 – В поле Значение по умолчанию задана требуемая последовательность

2.6 Внешние ключи и создание связей между таблицами

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

Для БД "Деканат ВУЗа" связь между таблицами Students и Groups задается с помощью первичного ключа таблицы Groups и внешнего ключа таблицы Students. Первичный ключ таблицы Groups к этому времени уже должен быть создан.

Ограничение внешнего ключа говорит, что значение в колонке (или группе колонок) одной таблицы – ведомой, должно полностью совпадать со значениями, которые существуют в некоторых строках другой таблицы - ведущей. Для примера: у ведомой таблицы Students значения в колонке код группы GrNo должны совпадать с соответствующими значениями в колонке код группы GrNo таблицы Groups.

Чтобы создать внешний ключ в ведомой таблице нужно выбрать в окне Браузер объектов требуемую таблицу, например Students, активизировать ее контекстное меню и в нем выбрать пункт Свойства (рисунок 2.20).

Рисунок 2.20 – Контекстное меню объекта Таблица

После этого откроется окно характеристик выбранной таблицы (рисунок 2.21).

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

В нем нужно открыть закладку Ограничения, выбрать в выпадающем списке тип ограничения вторичный (внешний) ключ и нажать кнопку Добавить. В результате выполнения этих действий появится окно Новый внешний ключ (рисунок 2.22).

Рисунок 2.22 – Окно Новый внешний ключ. Закладка Свойства

Чтобы создать новый внешний ключ необходимо выполнить следующие действия:

1) на закладке Свойства задать имя внешнего ключа, например, GrNoFK (FK от англ. Foreign Key – внешний ключ);

2) на закладке Определение:

a) в поле Ссылается выбрать из списка таблицу, на которую ссылается внешний ключ;

b) отметить свойство Совпадение полное, которое говорит о том, что значения внешнего ключа должны полностью совпадать со значениями первичного ключа;

3) на закладке Колонки (рисунок 2.23) выбрать колонку исходной таблицы (Локальная колонка), которая определяет внешний ключ (для приведенного примера это колонка GrNo таблицы Students), и колонку, на которую ссылается внешний ключ (колонка GrNo таблицы Groups).

Примечание. Для наглядности имя колонки внешнего ключа GrNo таблицы Students, совпадает с именем колонки первичного ключа GrNo таблицы Groups. На практике это не обязательно и не всегда приветствуется;

Рисунок 2.23 – Закладка Колонки окна Новый внешний ключ

4) на закладке Действие (рисунок 2.24) выбрать действие, которое будет выполняться при изменении или удалении значения первичного ключа. Эти действия являются средством обеспечения целостности БД.

Рисунок 2.24 – Закладка Действие окна Новый внешний ключ

Возможные варианты действий:

а) NO ACTION – никаких дополнительных действий и ограничений;

б) RESTRICT – удаление/изменение значения первичного ключа запрещается, если на него ссылается какой-либо внешний ключ. Это действие установлено по умолчанию;

в) CASCADE – удаление строки в родительской таблице приводит к удалению всех связанных с ней строк дочерней таблицы (например, если удалить запись о группе в таблице Groups, то автоматически будут удалены все записи о ее студентах в таблице Students). Изменение значения первичного ключа родительской таблицы приводит к соответствующему изменению значений внешних ключей дочерней таблицы. Например, если изменить какое-либо значение в колонке GrNo таблицы Groups, то автоматически будут изменены связанные с ним значения колонки GrNo в таблице Students;

г) SET NULL – удаление/изменение первичного ключа родительской таблицы приводит к установке в значение NULL всех внешних ключей дочерней таблицы, которые ссылаются на удаленное/измененное значения первичного ключа родительской таблицы. Например, если удалить/изменить значение в колонке GrNo таблицы Groups, то связанные с ним значения колонки GrNo в таблице Students автоматически будут установлены в NULL;

д) SET DEFAULT – удаление/изменение первичного ключа родительской таблицы приводит к установке в значение по умолчанию всех внешних ключей дочерней таблицы, которые ссылаются на удаленное/измененное значения первичного ключа родительской таблицы.

Чтобы увидеть результат изменений колонки, таблицы или БД необходимо выделить соответствующий объект в окне Браузер объектов и выполнить его обновление (рисунок 2.25).

Рисунок 2.25 – Обновление объекта БД







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.