Учебно-практическое пособие москва 2017 ббк


INSERT INTO students ( record_book, name, doc_ser, doc_num )



Pdf көрінісі
бет102/243
Дата21.07.2022
өлшемі3,05 Mb.
#147663
түріУчебно-практическое пособие
1   ...   98   99   100   101   102   103   104   105   ...   243
Байланысты:
Язык SQL. Базовый курс

INSERT INTO students ( record_book, name, doc_ser, doc_num )
VALUES ( 12300, '', 0402, 543281 );
Наверное, проектируя эту таблицу, мы хотели бы все же, чтобы пустые строки
в качестве значения атрибута name не проходили в базу данных? Какое реше-
ние вы можете предложить? Видимо, нужно добавить ограничение CHECK для
столбца name. Если вы еще не изучили команду ALTER TABLE, то удалите табли-
цу students и создайте ее заново с учетом нового ограничения, а если с командой
ALTER TABLE вы уже познакомились, то сделайте так:
ALTER TABLE students ADD CHECK ( name <> '' );
Добавив ограничение, попробуйте теперь вставить в таблицу students сроку
(row), в которой значение атрибута name было бы пустой строкой (string).
Давайте продолжим эксперименты и предложим в качестве значения атрибута
name строку, содержащую сначала один пробел, а потом — два пробела.
INSERT INTO students VALUES ( 12346, ' ', 0406, 112233 );
INSERT INTO students VALUES ( 12347, ' ', 0407, 112234 );
Для того чтобы «увидеть» эти пробелы в выборке, сделаем так:
SELECT *, length( name ) FROM students;
Оказывается, эти невидимые значения имеют ненулевую длину. Что делать,
чтобы не допустить таких значений-невидимок? Один из способов: возложить
проверку таких ситуаций на прикладную программу. А что можно сделать на
уровне определения таблицы students? Какое ограничение нужно предложить?
В разделе 9.4 «Строковые функции и операторы» есть функция trim(). Попро-
буйте воспользоваться ею. Если вы еще не изучили команду ALTER TABLE, то
удалите таблицу students и создайте ее заново с учетом нового ограничения, а
если с командой ALTER TABLE вы уже познакомились, то сделайте так:
ALTER TABLE students ADD CHECK (...);
Посмотрите и таблицу «Успеваемость» (progress) на предмет подобных слабых
мест.
10. В таблице «Студенты» (students) атрибут «Серия документа, удостоверяющего
личность» (doc_ser) имеет числовой тип, однако в сериях таких документов мо-
гут встречаться лидирующие нули, которые в числовых столбцах не сохраняют-
ся. Например, при записи значения серии «0402» первый ноль не сохранится в
таблице.
Модифицируйте таблицу students, заменив числовой тип данных на символь-
ный, например, character. Как вы думаете, эта операция пройдет без затруд-
нений или они все же возможны? Проверьте ваши предположения, выполнив
модификацию.
105


11.* В таблице «Рейсы» (flights) есть ограничение, которое регулирует соотношения
значений фактического времени вылета и фактического времени прилета. Как
вы думаете, не является ли выражение actual_arrival IS NOT NULL во второй ча-
сти условного оператора OR избыточным?


Достарыңызбен бөлісу:
1   ...   98   99   100   101   102   103   104   105   ...   243




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

    Басты бет