|
Программирование >> Программный интерфейс приложений
Тип set может содержать опции, которые действительно заказываются покупателями. SET ( cruise control, sun roof) SET ( luggage rac], air conditioning ) SET( luggage rack, cruise control, air conditioning ) SET( air conditioning ) SET( ) Пустая строка означает, что покупатель не заказал никаких опций. Это допустимое значение. Значения располагаются в одну строку. Если значение состоит из множественных членов эти члены разделяются в строке запятыми. Это значит, что в качестве члена множества нельзя использова1ь значение запятая . В качестве другого примера использования столбцов типа set можно привести хранение диагнозов пациентов или результаты выборок из Web-страниц. В случае диагноза пациентов членами множества может быть ставдартный перечень вопросов, необходимых для выяснения клинической картины. Пациент ответит на все вопросы или только на часть из них. Для заказа пиццы в режиме on-line это может быть выбор требуемых ингредиентов. При этом может быть выбрано несколько ингредиентов сразу. Правила объявления списков значений для типов set и EisTOM можно определить так. Допустимые значения определяются списком. Регистр значений задается в объявлении столбца. Поэтому, значения в столбце, объявленном как EiSTOMCN , У ), сохраненные как п , у , при выборке будут отображаться как N , У . Это не повлияет на результаты сравнения и сортировки, так как типы set и ENUM не чувствительны к регистру. Порядок значений в объявлении enum определяет порядок сортировки. Порядок значений в объявлении set также определяется порядком сортировки. Однако здесь имеет место более сложная зависимость, так как элементы списка могут содержать множественный набор членов. Порядок следования значений в объявлении set определяет порядок, в котором появляются подстроки при отображении множественных значений. Типы set и enum классифицируются как строковые. Но внутренне элементы множеств сохраняются как числа, и их можно обрабатывать как таковые. Это означает, что значения типов set и enum можно обрабатывать как цифровые. Очевидно, что эти типы эффективнее других строковых типов, так как их можно обрабатывать цифровыми, а не строковыми операциями. Это также означает, что тип set и тип enum можно использовать как в строковом, так и цифровом контексте. Элементы типа ENUM нумеруются последовательно, начиная с 1. (О используется для обозначения ошибочного номера, который представляется в строковом виде пустой строкой). Число номеров перечисления определяется объемом, который занимает столбец типа ENUM. Один байт может хранить 256 значений, два байта - 65536. (Сравните это с диапазонами значений однобайтовых и двухбайтовых целочисленных типов TINYINT UNSUGNED и SMALLINT UNSUGNED.) Напрашивается вывод, что максимальным количеством элементов перечисления является 65536 (включая ошибочный элемент), а объем требуемой памяти зависит от того, содержит список больше 256 элементов или нет. При этом максимум опередляется как 65535 элементов (а не 65536), так как один элемент по умолчанию резервируется для хранения ошибочного элемента. Он нужен для того, чтобы присваивать ошибочное значение всякий раз, когда присваивается недопустимое значение. Вот пример, который читатель может повторить с помощью клиентской программы mysql. Из него видно, что элементы перечисления сортируются по цифровому порядку, а также, что пустому значению номер при сортировке не присваивается. mysql> CREATE TABLE e table (в ENDMCjane , fred , will , marcia )); mysql> INSERT INTO e table; VALUES{ jane ), ( fred ), { will ), ( marcia ), ( ), (NULL); mysql> SELECT e, e+0, e+1, e+3 FROM e table; I e I e+0 I e+1 e+3
Элементы типа ENUM можно обрабатывать по имени или по числовому значению. mysql> SELECT е FROM WHERE е = will ; I e I +--------+ I will I +--------+ mysql> SELECT e FROM WHERE e = 3; I will Указание пустой строки в качестве элемента перечисления вполне допустимо. Аналогично любому другому элементу, перечисленному в объявлении. ему будет присвоено ненулевое значение. Однако нужно помнить, что использование пустой строки может привести к неопределенности данных, потому что пустая строка может использоваться для элемента с цифровым значением, равным 0. На данном примере видно назначение ошибочного значения х . Это можно увидеть только в цифровом представлении. mysql> CREATE TABLE t (e ENUMCa , mysql> INSERT INTO t VALUES( a ), ( niysql> SELECT e, e+O PROM t; , b )); ( X ); Цифровое представление столбцов типа SET немного отличается от цифрового представления столбцов типа ЕЫим. Здесь элементы множества не нумеруются последовательно. Вместо этого каждый элемент соответствует своему биту в значении ЗЕТ. Первый элемент множества соответствует нулевому биту, второй - первому и т.д. Цифровое значение ЗЕТ, равное О, соответствует пустой строке. Элементы множества обрабатьшаются как биты. Таким образом, в одном бите можно сохранить восемь значений. Отсюда объем требуемой памяти определяется количеством элементов множества до 64 элементов. Значения ЗЕТ занимают 1, 2, 3, 4 или 8 байт соответственно для множеств от 1 до 8 элементов, от 9 до 16 элементов, от 17 до 24 элементов, от 25 до 32 элементов и от 33 до 64 элементов. Хранение значений типа ЗЕТ в виде наборов битов позволяет значению иметь множественный набор элементов. Любая комбинация битов может быть преобразована в значение, таким образом, значение может принимать любую комбинацию строк. Вот пример связи между строковыми и цифровыми формами столбцов типа ЗЕТ. Здесь цифровое значение отображается как в десятичной, так и двоичной формах. fred , will , marcia )); mysql> CREATE TABLE s table (a SET( jane , mysql> INSERT INTO s table VALUES( jane ), ( fred ), ( will ), ( marcia ), ( mysql> SELECT s, s+0 BIN(S+0) FROM s table; ), (NULL); s+0 I BIN(s+0)
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |