* Релационна база от данни
Публикувано на 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 коментара за “Релационна база от данни”
Trackback URI | RSS за коментарите
Пусни коментар
Категории
- Бази от Данни (52)
- Вероятности (31)
- История (15)
- Кучета (69)
- Лада Нива (96)
- Математика (166)
- Методика (53)
- Общи работи (110)
- ПИК-3 Java (38)
- Политика (41)
- Програмни Среди (1)
- ПТСК (41)
- С/C++ (45)
- Семейни (16)
- Физика (35)
- ХHTML/JS (25)
- Храна (11)
Нови
- Извеждане на няколко произволни реда
- Full-Text търсене с InnoDB в MySQL
- Късметче от кафе
- Пред блока…
- Бушонно табло на Лада Нива
26 май 2009 на 14:52
Браво, търсих информация за релационните бази от данни, която хем да е теоретична (а не постъпкова инструкция за работа), хем разбираема. Тази е единствената, която намерих.При това доста се порових!!! Благодаря!!!
26 май 2009 на 18:52
Благодаря, старая се :)
14 май 2010 на 8:50
За външния ключ на таблица в релационна база данни важи правилото:
А) Не може да се запише в таблицата, ако не съществува ред от друга таблица със същата стойност на първичен ключ.
Б) Може да приема произволни стойности.
В) Трябва задължително да присъства във всяка таблица на релационната база данни, като атрибутите не трябва да се повтарят.
Г) Идентифицира еднозначно всеки ред
как мислите?
14 май 2010 на 10:19
Мисля, че е добра насока за дефиниция, но А) и Б) си противоречат, а В) и Г) не са верни. По скоро бих обединил двете точки в една:
A и Б) Външен ключ може да приема само стойност на съответен отговарящ на него първичен ключ или ако му е позволено да не приема никаква стойност (т.е. NULL).
Точка В не е вярна. Стойностите в колоната на външния ключ могат спокойно да се повтарят (да не са UNIQUE). Именно така се прави релация 1:M !!!
Точка Г също НЕ е вярна. Външния ключ НЕ идентифицира реда. Той идентифицира релацията на реда към друга таблица.
08 юни 2010 на 23:25
От известно време чета този блог и наистина е пълно с добре обяснена и полезна информация.
Бих искал само да попитам за един проблем, на който се натъкнах на скоро и не мога да му намеря решение. Могат ли два външни ключа, от две различни таблици да сочат към първичен ключ на трета таблица.
Ето и примерно изображение http://i49.tinypic.com/a5ghdy.jpg
Това са само примерни таблици. Има ли някакво решение за това?
09 юни 2010 на 9:50
Стоимен: Това не е проблем. Съвсем нормално е и се използва често.
09 юни 2010 на 19:17
Аз ползвам mysql и създавам таблиците си с InnoDB, обаче като се опитам да ги навържа с външни ключове по посочения начин дава грешка.
Ако ползвам myisam всичко е наред, но доколкото знам myisam не е добре да се ползва за релационни бази данни…
09 юни 2010 на 19:46
Ако покажеш какво правиш ще отговоря къде е проблема. MyISAM въобще няма FOREIGN KEY…
15 март 2012 на 19:45
“- Връзка от тип 1:1 от таблица B към таблица A се осъществява, чрез външен ключ със стойности без повторения в B, който съответства на първичен ключ в A.
- Връзка от тип 1:1 от таблица B към таблица A се осъществява, чрез външен ключ в B, който съответства на първичен ключ в A, и в който има възможност за повторения на стойностите.”
Едното от двете трябва да е 1 : М ? предполагам 2рото
15 март 2012 на 20:05
Разбира се, че е така. Сега ще го поправя.