Релационна база данни

Релационна база данни е тип база данни, която съхранява множество данни във вид на релации, съставени от записи и атрибути (полета) и възприемани от потребителите като таблици. Релационните бази данни понастоящем преобладават при избора на модел за съхранение на финансови, производствени, лични и други видове данни.

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

Запис и атрибут в релация

Терминът „релационна база данни“ за първи път е предложен през 1970 година от Едгар Код, учен в IBM.

Теорията на релационните бази данни използва набор от математически термини, които имат съответствия с термините, използвани при SQL базите данни:

  • релация, релационна схема (relation) ↔ таблица (table),
  • запис, кортеж (tuple) ↔ ред (row),
  • атрибут, поле (attribute) ↔ стълб, колона (column).

Като синоними се използват и понятията клас в смисъла на релация с точно определени атрибути и екземпляр на класа в смисъл на един от записите на тази релация.

Релацията (relation) се дефинира като множество от записи, които имат едни и същи атрибути. Записът обикновено представя обект и информация за обекта, който обичайно е физически обект или понятие. Релацията обикновено се оформя като таблица, организирана по редове и колони. Всички данни, които се съдържат в даден атрибут, принадлежат на едно и също множество от допустими стойности, наречено домейн, и съблюдават едни и същи ограничения.

Характеристики на релацията:

  • Всяка релация (таблица) в базата данни носи уникално име.
  • Всеки атрибут носи уникално име в рамките на дадена релация.
  • Всяка релация съдържа уникални записи, не може да съдържа повтарящи се идентични записи.
  • Няма определен ред, в който се разполагат записите в дадена релация или атрибутите в даден запис.
  • Стойностите в записите са атомарни – те не могат да се състоят от различни типове данни (данни от различни домейни) или да са резултат от изчисление или конкатенация.

Физическата организация на данните в паметта няма значение за релационния модел, в който важи само логическата им организация.

Приложенията за бази данни осъществяват достъп до данните, като отправят заявки, които използат операции като select (селекция), за да се идентифицират записите, project (проекция), за да се идентифицират атрибутите, и join (съединение), за да се комбинират релации. Релациите се манипулират чрез операторите create (създаване), insert (вмъкване), delete (изтриване) и update (актуализиране).

Базови и производни релации

[редактиране | редактиране на кода]

В релационната база данни, всички данни се съхраняват и обработват посредством релации. Релациите, които съхраняват данните, се наричат базови релации (base relations) или таблици (tables). Други релации обаче не съхраняват данни, а се изчисляват чрез прилагането на операции над други релации. Наричат се производни релации (отношения), а в приложенията за бази данни се наричат заявка (query) и изглед (view). Предимството на производните релации е, че функционират като една релация, въпреки че могат да включват информация от няколко релации.

Домейн в базите данни означава множеството от допустимите стойности на даден атрибут на релация, т.е. представлява известно ограничение върху стойностите и името на атрибута. Математически погледнато, прилагането на домейн към даден атрибут означава, че атрибутът приема за стойности елементите от дадено множество.

Ограниченията (constraints) позволяват в още по-голяма степен да се специфицират стойностите, които атрибутите от даден домейн могат да приемат. Например, за атрибут от домейна на целите числа, може да е валидно ограничение на стойностите между 1 и 10. Ограниченията предлагат един от методите за реализиране на бизнес правилата в базите данни.

Ограниченията стесняват обхвата на данните, които могат да се съхранят в релациите. Те могат да се приложат над отделни атрибути, над записи или над цялата релация.

Ключ (key) се наричат един или повече атрибута със специално предназначение в таблицата на релацията. Видът на ключа определя предназначението му. Съществуват четири различни вида ключове в базите данни:

Най-важните сред тях са първичният и външният ключове. Всяка таблица трябва да съдържа поне един първичен ключ.

Първичен ключ (primary key) е атрибут (по-рядко група атрибути), който служи да идентифицира по уникален начин всеки запис (екземпляр) на релацията. Когато измежду атрибутите на релацията няма един подходящ за първичен ключ атрибут, вариантите са:

  • да се прибегне към множество от два и повече атрибути, които заедно идентифицират записите еднозначно, т.нар. сложен първичен ключ (composite primary key), или
  • да се добави нов атрибут, по който да се прави идентификацията на записите.

Външният ключ (foreign key) е необходим, когато налице е отношение между две таблици (релации). Отношението се създава, като копие от първичния ключ на едната таблица се включи в структурата на втората таблица, за която той е външен (понеже тя вече си има свой собствен първичен ключ). Освен да помогне в установяването на отношение между двете таблици, външният ключ помага да се осигури и интегритета (целостта) на ниво отношение.

Отношение и кардиналност

[редактиране | редактиране на кода]

Отношение (relationship, в някои източници с това значение е натоварен терминът релация) се нарича зависимост, съществуваща между две таблици, когато записи от първата таблица могат да се свържат по някакъв начин със записи от втората таблица. Три са възможните видове отношения, още известни като кардиналности или кардинални числа (cardinality):

  • „едно към едно“ (1:1),
  • „едно към много“ (1:N),
  • „много към много“ (M:N).

Отношението от вид „едно към едно“ е налице, когато всеки запис от една таблица е свързан с най-много един запис от втора таблица и всеки запис от втората таблица е свързан най-много един запис от първата таблица. Този вид отношение е специално, защото е единственото, при което двете таблици могат да споделят един общ първичен ключ. Възможно е обаче и първичните им ключове да са различни и отношението да се създава с използване на външен ключ, като първичният ключ на едната таблица, без значение коя, се включи в структурата на другата.

Отношение „едно към много“

Отношение „едно към много“ между две таблици съществува тогава, когато един запис от първата таблица, наречена родителска, може да бъде свързан с много записи от втората таблица, наречена дъщерна, но запис от дъщерната таблица може да бъде свързан само с един запис от родителската таблица. Отношението между двете таблици се създава като копие на първичния ключ на родителската таблица се включи в структурата на дъщерната таблица, за която той представлява външен ключ. В литературата се среща и кардиналността „много към едно“ (N:1), която е вариант на „едно към много“. Това е най-често срещаният вид отношение между таблици.

Отношение „много към много“

Отношението „много към много“ съществува когато един запис от едната таблица може да се свърже с много на брой записи от втората таблица, и един запис от втората може да се свърже с много на брой записи от първата таблица. За да се създаде на практика това отношение, се използва нова, свързваща или асоциираща таблица, която съдържа копия на първичните ключове на двете таблици. От една страна свързващата таблица представлява сложен първичен ключ на отношението, а от другата страна, всеки от първичните ключове на изходните таблици играе ролята на външен ключ за свързващата таблица.

Операции над релационни бази данни

[редактиране | редактиране на кода]

Заявките, които се отправят към релационната база данни, и извлечените в резултат подтаблици се изразяват със средствата на релационната алгебра (релационно смятане). В своята оригинална релационна алгебра, Код въвежда осем релационни оператора в две групи по четири. Първите четири оператора са били базирани на традиционните математически операции над множества:

  • Оператор обединение (union) комбинира записи от две релации и премахва от резултата всички евентуални повтарящи се записи. Релационният оператор обединение е еквивалентен на SQL-оператора UNION.
  • Оператор сечение (intersection) извежда множеството от записи, които са общи за двете релации. Сечението в SQL е реализирано чрез оператора INTERSECT.
  • Оператор разлика (difference) се прилага над две релации и в резултат връща множеството от записите от първата релация, които не съществуват във втората релация. В SQL разликата е имплементирана посредством оператора EXCEPT или MINUS.
  • Оператор декартово произведение или само произведение (Cartesian product, cross join, cross product) на две релации представлява съединение (join), при което всеки запис от първата релация се конкатенира с всеки запис от втората релация. В SQL операторът е реализиран под името CROSS JOIN.

Останалите оператори, предложени от Код, включват операции, които са специфични за релационните бази данни.

  • Операцията селекция (selection, restriction) връща само онези записи от дадена релация, които отговарят на избрани критерии, т.е. подмножество в термините на теорията на множествата. Еквивалентът на селекцията в SQL е заявка SELECT с клауза WHERE.
  • Операцията проекция (projection) е по своя смисъл селекция, при която повтарящите се записи се отстраняват от резултата. В SQL е реализирана с клаузата GROUP BY или чрез ключовата дума DISTINCT, внедрена в някои диалекти на SQL.
  • Операцията съединение (join), дефинирана за релационни бази данни, често се нарича и естествено съединение (natural join). При този вид съединение две релации са свързани посредством общите им атрибути. В SQL тази операция е реализирана приблизително чрез оператора за съединение INNER JOIN. Други видове съединение са лявото и дясното външни съединения, внедрени в SQL като LEFT JOIN и RIGHT JOIN, съответно.
  • Операцията деление (division) е малко по-сложна операция, при която записи от една релация в ролята на делител се използват, за да се раздели втора релация в ролята на делимо. По смисъла си, тази операция е обратна на операцията (декартово) произведение.

В добавка към въведените от Едгар Код осем оригинални оператора, впоследствие са въведени и други, включително оператори за релационно сравнение и разширения, които реализират йерархични, темпорални, размити данни и т.н.

Нормализация на бази данни

[редактиране | редактиране на кода]

Друго понятие, което е първоначално предложено от Код като съществена част от релационния модел, е нормализацията на базите данни. Нормализацията, т.е. привеждането в нормална форма включва набор от практики по отстраняването на повторения сред данните, което от една страна води до икономия на памет и повишено бързодействие, а от друга страна предпазва от аномалии при манипулирането с данните (вмъкване, актуализиране и изтриване) и от загуба на тяхната цялост. В процеса на нормализация се осигурява оптимална структура на базата от данни, основаваща се на взаимозависимостта между данните. Структурата на таблиците се трансформира, с цел да се оптимизират функционалните зависимости на съставните им атрибути.

  • „Проектиране на бази от данни“, Майкъл Ернандес, Софтпрес, 2004, ISBN 954-685-301-1
  Тази страница частично или изцяло представлява превод на страницата Relational database в Уикипедия на английски. Оригиналният текст, както и този превод, са защитени от Лиценза „Криейтив Комънс – Признание – Споделяне на споделеното“, а за съдържание, създадено преди юни 2009 година – от Лиценза за свободна документация на ГНУ. Прегледайте историята на редакциите на оригиналната страница, както и на преводната страница, за да видите списъка на съавторите. ​

ВАЖНО: Този шаблон се отнася единствено до авторските права върху съдържанието на статията. Добавянето му не отменя изискването да се посочват конкретни източници на твърденията, които да бъдат благонадеждни.​