ПредишенСледващото

Този документ описва на външен ключ SQL поддръжка, приложена в SQLite версия 3.6.19.

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

Глава 4 описва най-съвременните характеристики, свързани с външни ключове се поддържат в SQLite. В глава 5 описва как ALTER командване и DROP маса с външни ключове. В последната глава 6 списъци нереализирани възможности и ограничения на текущото изпълнение.

Този документ не съдържа пълно описание на синтаксиса за създаване на външен ключ, използван в SQLite. Тя може да се намери, като част от документацията за израза CREATE TABLE.

1. Обща информация за чуждестранни основните пречки

Чуждестранните ключове в SQL се използват за прилагане на поддържането на връзки между таблици, към днешна дата. Помислете, например, схемата на базата данни, създаване на следната команда SQL:

За съжаление, ако потребителят редактира базата данни с помощта на външни средства или когато има грешка в самата програма, е възможно да вмъкнете в таблицата «песен» линии, които не разполагат съответстващи редове в «художник» масата. Или е възможно да изтриете линия от «художник» маса като по този начин се създава "виси" в съответствие «песен» на маса, което не остава в съответните редове «художник» маса.

Подобна ситуация може да доведе до логически грешки в приложения, софтуерни повреди, или да направите за разработка на приложения по-трудно.

Едно от решенията е да се добави външен ключ към схема на SQL база данни, която би принудила да гарантира запазването на връзките между «художника» маси и «песен». За да направите това, е необходимо да се измени декларация маса «песен» добавяне на външен ключ определение, както следва:

Това определя лимита за SQLite. Сега се опитва да вмъкнете ред в таблица «песен», за които не съществува съответен ред в «художник» таблицата ще бъде неуспешен, както и премахване на линията от «художник» маса има зависими редове в «песен» на маса.

Но има едно изключение: ако външен ключ колона в «песен» на масата е нула, се изисква наличието на съответния ред в таблицата с него «художник». В SQL, това означава, че следния израз трябва да бъде вярно в «песен» на масата за всеки ред:

Съвет: Ако някое приложение изисква строга кореспонденцията между «художника» и «песен», стойността на NULL трябва да бъдат забранени в колоната «trackartist». Това може да стане само чрез добавяне на ограничението на схема, съответстваща NOT NULL.

Следващият изход SQLite сесия от командния ред илюстрира резултата от външния ключ добавя към «песен» таблица:

След това можете да бъдете сигурни, че това е невъзможно, така че да манипулира данни, изтриване и промяна на «художника» реда на таблицата да се прекъсне външен ключ ограничение:

Следната терминология се използва в SQLite:

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

Терминът "еквивалент" в предходния параграф, се използва в смисъл, че сравнението се извършва с помощта на правилата, описани тук. В настоящия контекст, тези правила са, както следва:

  • При сравняване на текстови стойности, винаги използвайте комплектоване последователност. свързан с колона ключ родител.
  • При сравняване на стойностите на ключа родител се рафинира. преди сравняване affinirovannost това се отнася и за стойността на ключа за дете.

2. Разрешаването на подкрепа за външни ключове

Подкрепете проекта - споделете линка, благодаря!