Лого на 91. НЕГ „Проф. Константин Гълъбов“

Модул 3 · Урок 10

Типове данни. Ключове

Типовете в базите от данни — булев, цели, дробни, низове, null, BLOB — и ключовете: първичен (прост, съставен), идентификатор и външен ключ.

Защо типът е важен

От типа се определя колко памет е необходима за една стойност и какъв е броят на различните стойности. С всеки тип са свързани характерни операции: два низа могат да се конкатенират (слепят), две числа — да се умножат; но не можем да коренуваме низ. Внимание: един и същ знак може да означава различни операции — + при числата е събиране, при низовете — слепване; делението на цели и на дробни числа се различава съществено.

Различните СУБД поддържат типове с различаващи се имена и памет, но най-общо категориите са следните.

Категориите типове

Булев тип

Наречен на Джордж Бул. Стойности: само 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 = неделим двоичен обект.
  • Ключ: уникален, непразен, стабилен, задължителен при въвеждане.
  • Прост / съставен = първичен; изкуствен = идентификатор; връзка между таблици = външен ключ.