АНТИПАТТЕРН: ЗАДАНИЕ ЗНАЧЕНИЙ В ОПРЕДЕЛЕНИИ СТОЛБЦА
АНТИПАТТЕРН: ЗАДАНИЕ ЗНАЧЕНИЙ В ОПРЕДЕЛЕНИИ СТОЛБЦА
Многие предпочитают задавать допустимые значения данных при определении столбца. Определение столбца является частью метаданных — определения самой структуры таблицы.
Например, можно было бы определить ограничение проверки по столбцу. Этим ограничением запрещаются любые вставки и обновления, которые бы сделали это ограничение ложным.
Файл примера:..?1-Flavors/anti/create-table-check.sql
CREATE TABLE Bugs ( — другие столбцы
status VARCHAR (20) CHECK (status IN ('NEW, 'IN PROGRESS', 'FIXED'))
) ;
Базой данных MySQL поддерживается нестандартный тип данных, называемый ENUM, который ограничивает столбец конкретным набором значений.
Файл примера: 31 -Flavors/'anti/create-table-enum.sql
CREATE TABLE Bugs ( -- другие столбцы
Status ENUM('NEW, 'IN PROGRESS' , 'FIXED'),
) ;
В реализации MySQL значения объявляются как символьные строки, но внутри системы столбец хранится как порядковый номер символьной строки в нумерованном списке. Поэтому хранилище является компактным, но при сортировке запроса по данному столбцу результаты упорядочиваются по порядковому номеру, а не в алфавитном порядке строковых значений. Возможно, это поведение будет неожиданным для вас.
Другие решения включают домены и пользовательские типы. Эти решения можно использовать для ограничения столбца конкретным набором значений, и один и тот же домен или тип данных легко применять к нескольким столбцам в базе данных. Но данные функции пока не поддерживаются широко среди СУБД многих марок.
В конце концов, можно было бы написать триггер, содержащий набор разрешенных значений и генерирующий ошибку в случае, если состояние (status) не совпадает с одним из заданных значений.
Все эти решения характеризуются рядом недостатков. В следующих разделах описываются некоторые из этих проблем.
Опубликовал vovan666
July 23 2013 14:39:17 ·
0 Комментариев ·
3724 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.