|
||||
ALTER TABLE ONLY ResultsALTER TABLE ONLY "Results" ADD CONSTRAINT fk_res_stud FOREIGN KEY ("idStudent") REFERENCES "Students"("idStudent");
-- -- TOC entry 1868 (class 2606 OID 16466) -- Name: fk_res_sub; Type: FK CONSTRAINT; Schema: public; Owner: postgres --
ALTER TABLE ONLY "Results" ADD CONSTRAINT fk_res_sub FOREIGN KEY ("idSubject") REFERENCES "Subjects"("idSubject");
-- -- TOC entry 1869 (class 2606 OID 16471) -- Name: fk_res_tea; Type: FK CONSTRAINT; Schema: public; Owner: postgres --
ALTER TABLE ONLY "Results" ADD CONSTRAINT fk_res_tea FOREIGN KEY ("idTeacher") REFERENCES "Teachers"("idTeacher");
-- -- TOC entry 1865 (class 2606 OID 16451) -- Name: fk_sess_subj; Type: FK CONSTRAINT; Schema: public; Owner: postgres --
ALTER TABLE ONLY "Sessions" ADD CONSTRAINT fk_sess_subj FOREIGN KEY ("idSubject") REFERENCES "Subjects"("idSubject");
-- -- TOC entry 1866 (class 2606 OID 16456) -- Name: fk_sess_tea; Type: FK CONSTRAINT; Schema: public; Owner: postgres --
ALTER TABLE ONLY "Sessions" ADD CONSTRAINT fk_sess_tea FOREIGN KEY ("idTeacher") REFERENCES "Teachers"("idTeacher");
-- -- TOC entry 1990 (class 0 OID 0) -- Dependencies: 5 -- Name: public; Type: ACL; Schema: -; Owner: postgres --
REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC;
-- Completed on 2014-08-04 23:54:32 -- -- PostgreSQL database dump complete --
При внимательном рассмотрении трех сгенерированных скриптов видно, что основные команды по созданию таблиц и ограничений первичного и внешнего ключей почти не отличаются для этих трех СУБД. Дело в том, что язык SQL является стандартом для работы с базами данных и все современные реляционные базы данных стараются соблюдать этот стандарт. В основном, существенные различия заключаются только в используемых типах данных и небольших дополнениях, связанных с особенностями задания владельца таблицы (пользователя, который создал таблицу и, следовательно, имеет максимальные права для работы с ней), используемой кодировки и других настроек СУБД. Нередко первоначальное проектирование выполняется с ошибками или недочетами (не все условия учтены, требуются новые столбцы или, напротив, какие-то столбцы являются лишними). Очевидно, что необходимы средства для обеспечения простого внесения изменений в таблицы. Этим средством является команда SQL ALTER TABLE, которую используют для корректировки списка столбцов таблицы и наложения разных ограничений как на отдельные столбцы, так и на таблицу в целом. Покажем на нескольких примерах, как можно использовать эту команду. Выполнение SQL-команд осуществляется в оболочках с помощью специальных окон редактирования и выполнения SQL-скриптов. В dbForge Studio его можно создать с помощью меню «Новый»-> «SQL». В pgAdmin окно выполнения пользовательских запросов можно вызвать с помощью специальной кнопки на панели инструментов . После создания ограничения можно увидеть как объекты соответствующих таблиц в дереве элементов базы данных (ограничения или индексы):
Рис. 19. Ограничение на
Пример 1. Добавим ограничение уникальности на название кафедры в таблице Departments: MS SQL Server, MySQL: ALTER TABLE Departments ADD CONSTRAINT un_title UNIQUE (TitleDepartment);
PostgreSQL (отличием является заключением в кавычки имен таблиц, ограничения, столбцов): ALTER TABLE "Departments" ADD CONSTRAINT "un_title" UNIQUE ("TitleDepartment");
Пример 2. Требуется добавить ограничение проверки условия для таблицы оценок, означающее, что нижняя граница баллов должна быть меньше верхней. MS SQL Server: ALTER TABLE Marks ADD CONSTRAINT check_balls CHECK (LowBalls<HighBalls);
Для MySQL эта команда выполняется, но как таковой объект базы данных не создается.
PostgreSQL: ALTER TABLE "Marks" ADD CONSTRAINT "check_balls" CHECK ("LowBalls"<"HighBalls");
Пример 3. Требуется добавить ограничение проверки условия для поля телефона кафедры – телефон должен состоять из 7 цифр и иметь формат «ххххх-хх». Можно также, как и в предыдущем примере, добавить ограничение CHECK. Однако мы для демонстрации возможностей команды ALTER TABLE сначала удалим столбец телефона кафедры, а потом добавим новый столбец с учетом ограничения. В телефоне первая цифра 2 или 5, остальные цифры могут быть любыми. Для этого используется конструкция языка LIKE, задающая шаблон записи телефона (для PostgreSQL это конструкция SIMILAR TO):
MS SQL Server, MySQL: ALTER TABLE Departments DROP COLUMN PhoneDepartment; ALTER TABLE Departments ADD PhoneDepartment VARCHAR(9) CHECK (PhoneDepartment LIKE '[2,5][0-9][0-9]-[0-9][0-9]-[0-9][0-9]');
PostgreSQL: ALTER TABLE "Departments" DROP COLUMN "PhoneDepartment"; ALTER TABLE "Departments" ADD "PhoneDepartment" text CHECK ("PhoneDepartment" SIMILAR TO '(2|5)[0-9][0-9]-[0-9][0-9]-[0-9][0-9]');
Пример 4. Введем ограничение на согласованность баллов и оценки в таблице результатов сессии. Будем полагать для простоты, что в таблицу заносятся только положительные результаты сдачи зачетов и экзаменов. Таким образом, оценка должна быть только 3, 4 или 5. При этом должна быть учтена согласованность баллов исходя из шкалы принятой балльно-рейтинговой системы: MS SQL Server, MySQL: ALTER TABLE Results ADD CONSTRAINT ch_res_marks CHECK (Mark IN (3,4,5) AND ((Mark=3 AND Balls BETWEEN 55 AND 70) OR (Mark=4 AND Balls BETWEEN 71 AND 85) OR (Mark=5 AND Balls BETWEEN 86 AND 100))); PostgreSQL: ALTER TABLE "Results" ADD CONSTRAINT "ch_res_marks" CHECK ("Mark" IN (3,4,5) AND (("Mark"=3 AND "Balls" BETWEEN 55 AND 70) OR ("Mark"=4 AND "Balls" BETWEEN 71 AND 85) OR ("Mark"=5 AND "Balls" BETWEEN 86 AND 100)));
Заметим, что для аналогичных целей была предназначена таблица Marks. В дальнейшем мы будем использовать ее. Пример 5. В MySQL иногда требуется явно указать кодировку данных таблиц. Это также можно сделать с помощью команды ALTER TABLE: ALTER TABLE `Departments` CONVERT TO CHARACTER SET utf8;
|
||||
|