8.18. Ð¢Ð¸Ð¿Ñ Ð´Ð¾Ð¼ÐµÐ½Ð¾Ð² #
Ðомен â полÑзоваÑелÑÑкий Ñип даннÑÑ , оÑнованнÑй на дÑÑгом нижележаÑем Ñипе. Ðн Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð¿ÑеделÑн Ñ ÑÑловиÑми, огÑаниÑиваÑÑими множеÑÑво допÑÑÑимÑÑ Ð·Ð½Ð°Ñений подмножеÑÑвом знаÑений нижележаÑего Ñипа. РоÑÑалÑном он ведÑÑ ÑÐµÐ±Ñ ÐºÐ°Ðº нижележаÑий Ñип â напÑимеÑ, Ñ Ð´Ð¾Ð¼ÐµÐ½Ð½Ñми Ñипом бÑдÑÑ ÑабоÑаÑÑ Ð»ÑбÑе опеÑаÑоÑÑ Ð¸Ð»Ð¸ ÑÑнкÑии, пÑименимÑе к нижележаÑÐµÐ¼Ñ ÑипÑ. ÐижележаÑим Ñипом Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð»Ñбой вÑÑÑоеннÑй или полÑзоваÑелÑÑкий базовÑй Ñип, Ñип-пеÑеÑиÑление, маÑÑив, ÑоÑÑавной Ñип, диапазон или дÑÑгой домен.
ÐапÑимеÑ, Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ ÑоздаÑÑ Ð´Ð¾Ð¼ÐµÐ½ повеÑÑ ÑелÑÑ ÑиÑел, пÑинимаÑÑий ÑолÑко положиÑелÑнÑе ÑиÑла:
CREATE DOMAIN posint AS integer CHECK (VALUE > 0); CREATE TABLE mytable (id posint); INSERT INTO mytable VALUES(1); -- ÑабоÑÐ°ÐµÑ INSERT INTO mytable VALUES(-1); -- оÑибка
Ðогда к знаÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð¼ÐµÐ½Ð½Ð¾Ð³Ð¾ Ñипа пÑименÑÑÑÑÑ Ð¾Ð¿ÐµÑаÑоÑÑ Ð¸Ð»Ð¸ ÑÑнкÑии, пÑедназнаÑеннÑе Ð´Ð»Ñ Ð½Ð¸Ð¶ÐµÐ»ÐµÐ¶Ð°Ñего Ñипа, домен авÑомаÑиÑеÑки пÑиводиÑÑÑ Ðº нижележаÑÐµÐ¼Ñ ÑипÑ. Так, напÑимеÑ, ÑезÑлÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑии mytable.id - 1 бÑÐ´ÐµÑ ÑÑиÑаÑÑÑÑ Ð¸Ð¼ÐµÑÑим Ñип integer, а не posint. ÐÑ Ð¼Ð¾Ð³Ð»Ð¸ Ð±Ñ Ð·Ð°Ð¿Ð¸ÑаÑÑ (mytable.id - 1)::posint, ÑÑÐ¾Ð±Ñ Ñнова пÑивеÑÑи ÑезÑлÑÑÐ°Ñ Ðº ÑÐ¸Ð¿Ñ posint, ÑÑо повлеÑÑÑ Ð¿ÐµÑепÑовеÑÐºÑ Ð¾Ð³ÑаниÑений домена. Ð ÑÑом ÑлÑÑае, еÑли данное вÑÑажение бÑÐ´ÐµÑ Ð¿Ñименено к id, ÑÐ°Ð²Ð½Ð¾Ð¼Ñ 1, пÑоизойдÑÑ Ð¾Ñибка. ÐнаÑение нижележаÑего Ñипа можно пÑиÑвоиÑÑ Ð¿Ð¾Ð»Ñ Ð¸Ð»Ð¸ пеÑеменной доменного Ñипа, не запиÑÑÐ²Ð°Ñ Ð¿Ñиведение Ñвно, но и в ÑÑом ÑлÑÑае огÑаниÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð¼ÐµÐ½Ð° бÑдÑÑ Ð¿ÑовеÑÑÑÑÑÑ.
Ðа дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº опиÑÐ°Ð½Ð¸Ñ CREATE DOMAIN.