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

Публикувано на 25 януари 2009 в раздел Бази от Данни.

Релационните бази от данни се появяват като понятие през 1970 от Едгар Код. Най-общо казано релационните бази от данни групират информацията по характерни признаци. За целта се използват доста близки до човешкото разбиране структури – таблици. Всяка таблица се състои от редове и колони. Всяка колона има наименование, което определя данните въведени в нея по редове, както и тип на тези данни. Обикновено имената и типа на колоните се наричат атрибути.

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

Когато правихме ER диаграми отбелязахме, че “Уникалното свойство за всеки обект, което еднозначно го идентифицира спрямо другите обекти в даден клас, се нарича ключ“. В релационните бази от данни това означава, че всяка колона, чийто стойности по редове са различни, може да бъде “ключова”. Например ако имаме таблица с име, факултетен номер и ЕГН на студент може да се каже, че ключови са колоните “факултетен номер” и “ЕГН”, тъй като те са уникални. Името не може да се приеме за ключов атрибут, тъй като е възможно да съществуват двама студенти с напълно еднакви имена. В релационните бази от данни обикновено се избира един от ключовете за дадена таблица и се прави първичен ключ (primary key). Той е основен инструмент за осъществяване на релации. Първичен ключ може да е съставен както от един, така и от множество атрибути на дадена таблица.

Данните по редове в релационните бази от данни се записват с определен тип. Често не е възможно да се запише дадена информация (например в момента не знаем презимето на даден служител). За целта се използва специална стойност на полето – NULL. Едно от основните ограничения в релационните бази от данни е, че първичните ключове не могат да приемат стойност NULL!

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

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

Сега вече можем лесно да направим връзка ER модела на база от данни и релационния й модел:

- Класовете обекти от ER модела се превръщат в таблици.
- Атрибутите от ER модела се прехвърлят като атрибути на таблицата.
- Характеризиращите обекти също се представят като обикновени таблици, като имат външен ключ сочещ към първичния на таблицата, която характеризират.
- Подклас обекти се представя аналогично на характеризиращите обекти. Обикновено таблицата на подкласа се свързва с основната таблица чрез външен ключ осъществяващ връзка 1:1.
- Връзка от тип 1:1 от таблица B към таблица A се осъществява, чрез външен ключ със стойности без повторения в B, който съответства на първичен ключ в A.
- Връзка от тип M:1 от таблица B към таблица A се осъществява, чрез външен ключ в B, който съответства на първичен ключ в A, и в който има възможност за повторения на стойностите.
- Връзки от тип M:M между две таблици се представя като отделна таблица, в която има два външни ключа, сочещи към свързваните таблици.

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



10 коментара за “Релационна база от данни”


  1. Desislava Baeva:

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


  2. Филип Петров:

    Благодаря, старая се :)


  3. Валентина Петкова:

    За външния ключ на таблица в релационна база данни важи правилото:
    А) Не може да се запише в таблицата, ако не съществува ред от друга таблица със същата стойност на първичен ключ.
    Б) Може да приема произволни стойности.
    В) Трябва задължително да присъства във всяка таблица на релационната база данни, като атрибутите не трябва да се повтарят.
    Г) Идентифицира еднозначно всеки ред
    как мислите?


  4. Филип Петров:

    Мисля, че е добра насока за дефиниция, но А) и Б) си противоречат, а В) и Г) не са верни. По скоро бих обединил двете точки в една:

    A и Б) Външен ключ може да приема само стойност на съответен отговарящ на него първичен ключ или ако му е позволено да не приема никаква стойност (т.е. NULL).

    Точка В не е вярна. Стойностите в колоната на външния ключ могат спокойно да се повтарят (да не са UNIQUE). Именно така се прави релация 1:M !!!

    Точка Г също НЕ е вярна. Външния ключ НЕ идентифицира реда. Той идентифицира релацията на реда към друга таблица.


  5. Стоимен Стоименов:

    От известно време чета този блог и наистина е пълно с добре обяснена и полезна информация.

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

    Ето и примерно изображение http://i49.tinypic.com/a5ghdy.jpg

    Това са само примерни таблици. Има ли някакво решение за това?


  6. Филип Петров:

    Стоимен: Това не е проблем. Съвсем нормално е и се използва често.


  7. Стоимен Стоименов:

    Аз ползвам mysql и създавам таблиците си с InnoDB, обаче като се опитам да ги навържа с външни ключове по посочения начин дава грешка.

    Ако ползвам myisam всичко е наред, но доколкото знам myisam не е добре да се ползва за релационни бази данни…


  8. Филип Петров:

    Ако покажеш какво правиш ще отговоря къде е проблема. MyISAM въобще няма FOREIGN KEY…


  9. Guest:

    “- Връзка от тип 1:1 от таблица B към таблица A се осъществява, чрез външен ключ със стойности без повторения в B, който съответства на първичен ключ в A.
    - Връзка от тип 1:1 от таблица B към таблица A се осъществява, чрез външен ключ в B, който съответства на първичен ключ в A, и в който има възможност за повторения на стойностите.”

    Едното от двете трябва да е 1 : М ? предполагам 2рото


  10. Филип Петров:

    Разбира се, че е така. Сега ще го поправя.


Trackback URI | RSS за коментарите

Пусни коментар