С тех пор как мы здесь писали про создание таблиц в SoQoL, добавление и изменение данных в таблице, прошло немало времени. И в настоящий момент проводится уже тестирование нового функционала SoQoL — команды ALTER TABLE.
Посмотрим подробнее, на что способна команда ALTER TABLE в СУБД SoQoL:
- установка или удаление ограничения таблицы;
- переименование столбца или таблицы;
- удаление столбца с удалением всех ссылочных ограничений целостности.
Такой набор возможностей ALTER TABLE реализован во многих СУБД. Но есть ещё одна возможность, с помощью которой можно изменить характеристики существующего столбца. В разных СУБД эта возможность обозначается разными ключевыми словами, но суть одна.
Мы решили что эта возможность нужна и пользователям SoQoL, и добавили по примеру Oracle:
ALTER TABLE <имя_таблицы> MODIFY <имя_столбца> <характеристики>;
Давайте кратко на примерах посмотрим возможности ALTER TABLE в SoQoL:
Допустим, ранее мы создавали таблицу:
create table WORKERS (
TN int primary key,
DEPT varchar (100),
UNIT varchar (50),
CITY varchar (85),
NAME varchar (35),
SALARY number (10, 2));
Всем сотрудникам решили установить премию в определённом размере, а для её учёта нужен отдельный столбец:
alter table WORKERS add (BONUS number (10, 2) not null);
А еще поняли, что размер типа данных для имени маловат, нужно увеличить:
alter table WORKERS MODIFY (NAME varchar (125));
И здесь важно: если бы новый размер типа был меньше текущего размера данных, то была бы возвращена ошибка.
Теперь предположим, что данные с детализацией по сотрудникам были вынесены в отдельную таблицу PERSON_DETAILS, поэтому из таблицы WORKERS часть столбцов можно удалить:
alter table WORKERS drop (DEPT, UNIT , CITY);
А затем еще и свяжем эти таблицы между собой ограничением:
alter table WORKERS add constraint PERSONAL foreign key (TN) references PERSON_DETAILS (TN);
Вот такая небольшая экскурсия по жизненному пути маленькой базы данных.
Если говорить в целом про ALTER и для других объектов базы данных, то в планах реализация команды ALTER INDEX, которая позволяет:
- изменить имя индекса и его тип;
- установить или удалить компрессию индекса;
- изменить метод выравнивания индекса;
- пересоздать индекс и т.д.
В настоящий момент мы остановились на реализации ALTER INDEX для возможности изменения его имени. Почему только имени?
После совместного обсуждения приняли решение, что такая реализация на текущий момент наиболее приоритетна. Реализация более сложного синтаксиса команды CREATE INDEX (с возможностью указания других характеристик индекса как, например, в Oracle или Postgres) пока рассматривается.
И если про ALTER TABLE более-менее всё понятно, то что скажете про индексы? Как часто пользуетесь командами изменения индекса и в каком их варианте?
Обсудить в Telegram!