Учебное пособие Санкт-Петербург «бхв-петербург»



Pdf көрінісі
бет95/256
Дата18.11.2022
өлшемі1.88 Mb.
#465124
түріУчебное пособие
1   ...   91   92   93   94   95   96   97   98   ...   256
sql osnovi yazika

ALTER TABLE seats
ALTER COLUMN fare_conditions SET DATA TYPE integer
USING ( CASE WHEN fare_conditions = 'Economy' THEN 1
WHEN fare_conditions = 'Business' THEN 2
ELSE 3
END );
Для замены исходных значений на новые мы используем конструкцию CASE WHEN
... THEN ... ELSE ... END.
Выполнить операцию не удастся, СУБД выдаст сообщение об ошибке:
ОШИБКА: ограничение-проверку "seats_fare_conditions_check" нарушает
некоторая строка
120


5.3. Модификация таблиц
И в самом деле, в определении таблицы «Места» есть ограничение CHECK, которое
требует, чтобы значение столбца fare_conditions выбиралось из списка: Economy,
Comfort, Business. При замене символьных значений на числовые это ограничение
будет заведомо нарушаться. Следовательно, необходимо в команду ALTER TABLE до-
бавить операцию удаления этого ограничения. Пробуем новый вариант команды:
ALTER TABLE seats
DROP CONSTRAINT seats_fare_conditions_check,
ALTER COLUMN fare_conditions SET DATA TYPE integer
USING ( CASE WHEN fare_conditions = 'Economy' THEN 1
WHEN fare_conditions = 'Business' THEN 2
ELSE 3 END
);
Проверим результат работы с помощью команды
SELECT * FROM seats;
aircraft_code | seat_no | fare_conditions
---------------+---------+-----------------
319
| 2A
|
2
319
| 2C
|
2
319
| 2D
|
2
...
Теперь мы видим, что необходимо связать таблицы «Места» и «Классы обслужива-
ния» по внешнему ключу. Сделаем это:
ALTER TABLE seats
ADD FOREIGN KEY ( fare_conditions )
REFERENCES fare_conditions ( fare_conditions_code );
Посмотрев описание таблицы «Места», увидим, что внешний ключ успешно создан.
\d seats
...
"seats_fare_conditions_fkey" FOREIGN KEY (fare_conditions)
REFERENCES fare_conditions(fare_conditions_code)
Из теории известно, что атрибуты внешнего ключа не обязательно должны ссылать-
ся только на одноименные атрибуты ссылочной таблицы. Сейчас мы на практике
успешно проверили это утверждение. Однако для удобства сопровождения базы дан-
ных имеет смысл переименовать столбец fare_conditions в таблице «Места», т. е.
121




Достарыңызбен бөлісу:
1   ...   91   92   93   94   95   96   97   98   ...   256




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет