Защо типът е важен
От типа се определя колко памет е необходима за една стойност и какъв е броят на различните стойности. С всеки тип са свързани характерни операции: два низа могат да се конкатенират (слепят), две числа — да се умножат; но не можем да коренуваме низ. Внимание: един и същ знак може да означава различни операции — + при числата е събиране, при низовете — слепване; делението на цели и на дробни числа се различава съществено.
Различните СУБД поддържат типове с различаващи се имена и памет, но най-общо категориите са следните.
Категориите типове
Булев тип
Наречен на Джордж Бул. Стойности: само false (Не) и true (Да) — отговори на въпроси „Вярно ли е, че…?". Операции: конюнкция (и), дизюнкция (или), отрицание (не). В паметта: 0 и 1. Пример: колоната Налична в таблицата Книги на ИС за библиотека.
Цели числа
Представят се като низ от битове; кодирането на знака иска поне един допълнителен бит. Операции: аритметика и сравнения. Подходящи за атрибути, изразяващи брой или количество — налични единици от стока, конски сили.
Цифров код ≠ число
ЕГН и ISBN се състоят само от цифри, но НЕ изразяват число — няма да прилагаме аритметика върху тях. За такива стойности е по-естествен типът Текст/Низ.
Специфични подвидове: датите и моментите от времето — цяло число: броят изминали дни (или милисекунди) от условно приет начален момент. За хората се изобразяват като ден-месец-година и час:минути:секунди.
Числа с плаваща запетая
Дробните числа се представят с две цели със знак — мантиса m и порядък p: числото е 0.m × 10^p. Константата 3.14 може да се запише като 3.14e0, 0.314e1 или 314e−2 — оттам „плаваща запетая". За атрибути, които не са цели: маса, части от килограм. Чест подтип са паричните суми — точно две цифри след десетичната точка — и процентите.
Низове (текстове)
Редици от знаци на клавиатурната азбука — имена на хора и места, продукти, телефони, ЕГН. Знаците се представят с цели числа чрез кодови таблици: ASCII (до 256 знака) и Unicode (много повече).
Стойността „нищо“ — null
Когато не разполагаме със стойност за атрибут — не е известна или не съществува (клиент без телефон, студент без втора диплома) — я отбелязваме със специалната стойност null (nil, none). Помни: различна е от празния низ!
BLOB
BLOB (Binary Large Object) — необработваемо парче двоични данни, съхранено както е въведено: MP3, изображение, изпълним файл. СУБД само го съхранява — не може да изпълнява операции с него; BLOB стойностите са неделими.
Ключове
Кортежите на една таблица задължително трябва да могат да се различават помежду си. Ако два кортежа са еднакви, има два случая — и двата водят до проблеми:
- Представят един и същ обект → редундантност (излишество): при промяна на единия кортеж нищо не ни принуждава да променим и другия — не се знае коя версия е актуалната.
- Представят различни обекти → не знаем кой кортеж за кой обект се отнася; а да премахнем единия би довело до непълнота на данните.
Ключ
Атрибутът или атрибутите на релационната схема, които осигуряват уникалността на всеки кортеж в таблицата.
Изисквания, свързани с ключа:
- всяка таблица трябва да има ключ;
- стойността на ключа е различна във всеки кортеж;
- ключовият атрибут не може да е с празна стойност (иначе два реда с празен ключ → отново неразличими);
- добре е стойността на ключа да не се мени — най-добре никога;
- при въвеждане на кортеж стойност за ключа се въвежда непременно.
Първичен ключ — прост и съставен
Ако обектите имат естествен атрибут с такава роля, използваме него: ЕГН за граждани — прост ключ. Номерът в клас стига за учениците от един клас, но за цялото училище трябва (Номер в клас, Клас) — съставен ключ. Простите и съставните ключове наричаме първични (вътрешни).
Идентификатор — изкуственият ключ
Когато няма естествени атрибути за ключ (или целият кортеж би бил ключ — крайно неудобно), се добавя допълнителен, „конструиран" атрибут — идентификатор. Всъщност ЕГН е точно такъв изкуствен атрибут, добавен от системата ЕСГРАОН. В най-простия случай идентификаторът е цяло положително число — практика в много СУБД.
Домейнът на идентификатора — за в бъдеще
ЕГН кодира областта с 2–3 цифри: ако в дадена област за един ден се родят повече от 99 деца (или 49 от даден пол), те не могат да получат коректно ЕГН — записват ги в съседна област. Избирай домейн, който позволява уникалност и занапред!
Външен ключ
Външен ключ
Атрибут в една таблица, чиято стойност е стойността на първичния ключ на кортеж от друга таблица — служи за връзка между кортежи от различни таблици.
За простота и пестене на памет най-добре е ключът на втората таблица да е идентификатор с прости стойности (цяло число) — както class_id в нашата таблица students.
Какво трябва да запомниш
- Тип = памет + допустими стойности + характерни операции.
- ЕГН/ISBN са низове, не числа — не смятаме с тях.
- Дати = цели числа от начален момент; пари = дробни с 2 знака.
null= липсваща стойност ≠ празен низ; BLOB = неделим двоичен обект.- Ключ: уникален, непразен, стабилен, задължителен при въвеждане.
- Прост / съставен = първичен; изкуствен = идентификатор; връзка между таблици = външен ключ.