Каква е разликата между основни, уникални и чужди ключови ограничения и индекси?

Каква е разликата между primary, unique и foreign key constraints и indexes?

Работя върху Oracle 10g и SQL Server 2008


person Gold    schedule 07.11.2009    source източник


Отговори (7)


Първичен ключ и уникален ключ са ограничения за целостта на обекта

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

Ограничението за уникален ключ се използва за предотвратяване на дублирането на ключови стойности в редовете на таблица и за разрешаване на нулеви стойности. (В Oracle една нула не е равна на друга нула).

  • KEY или INDEX се отнася до нормален неуникален индекс. Допускат се неразличими стойности за индекса, така че индексът може да съдържа редове с еднакви стойности във всички колони на индекса. Тези индекси не налагат никаква структура на вашите данни, така че се използват само за ускоряване на заявките.
  • UNIQUE се отнася до индекс, където всички редове на индекса трябва да са уникални. Това означава, че един и същи ред може да няма идентични не-NULL стойности за всички колони в този индекс като друг ред. Освен че се използват за ускоряване на заявките, UNIQUE индексите могат да се използват за налагане на структура на данните, тъй като системата от бази данни не позволява това правило за различни стойности да бъде нарушено при вмъкване или актуализиране на данни. Вашата система от бази данни може да позволи УНИКАЛЕН индекс на колони, които позволяват NULL стойности, в който случай два реда могат да бъдат идентични, ако и двата съдържат NULL стойност (NULL се счита за неравно на себе си), въпреки че това вероятно е нежелателно в зависимост от вашия приложение.
  • PRIMARY действа точно като индекс UNIQUE, с изключение на това, че винаги се нарича „PRIMARY“ и може да има само един в таблица (и винаги трябва да има такъв; въпреки че някои системи за бази данни не налагат това). PRIMARY индексът е предназначен като начин за уникално идентифициране на всеки ред в таблицата, така че не трябва да се използва за колони, които позволяват NULL стойности. Вашият ОСНОВЕН индекс винаги трябва да е на най-малкия брой колони, които са достатъчни за еднозначно идентифициране на ред. Често това е само една колона, съдържаща уникален автоматично увеличаващ се номер, но ако има нещо друго, което може уникално да идентифицира ред, като например „код на държава“ в списък с държави, можете да използвате това вместо това.
  • Индексите FULLTEXT са различни от всички по-горе и поведението им се различава повече между системите за бази данни. За разлика от горните три, които обикновено са b-дърво (позволяващо избиране, сортиране или диапазони, започващи от най-лявата колона) или хеш (позволяващо избиране, започващо от най-лявата колона), FULLTEXT индексите са полезни само за пълнотекстово търсене, извършено с Клауза MATCH() / AGAINST().

вижте Разлики между INDEX, PRIMARY, UNIQUE, FULLTEXT в MySQL?

person Nadir SOUALEM    schedule 07.11.2009
comment
ЗАБЕЛЕЖКА: Уникалните ограничения и индекси на SQL Server третират нули като равни, така че в този случай два реда могат да бъдат идентични, ако и двата съдържат NULL стойност. не е вярно за SQL Server. - person Shannon Severance; 08.11.2009

Първичен ключ: идентифицира уникално всеки ред, който не може да бъде нула. не може да е дубликат.

Външен ключ: създава връзка между две таблици. може да бъде нула. може да бъде дубликат

person sana    schedule 16.10.2010
comment
Трябва ли всички външни ключове да бъдат първичен ключ на другата връзка? Ако не, тогава как нулевият атрибут ще бъде идентифициран уникално. - person ; 24.06.2016

Ето малко справка за вас:

Ограничение за първичен и външен ключ.

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

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

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

person Graviton    schedule 07.11.2009

Ключ/индекс: Ключът е аспект на ЛОГИЧЕСКИ дизайн на база данни, индексът е аспект на ФИЗИЧЕСКИ дизайн на база данни. Ключът съответства на ограничение за интегритет, индексът е техника за физическо записване на стойности, които могат да бъдат полезно приложени при налагането на тези ограничения.

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

Подобно на "първичния" ключ, "чуждият" ключ също е набор от атрибути. Стойностите на тези атрибути трябва да образуват комбинация, която е съществуваща стойност на първичен ключ в референтната таблица. Не знам точно колко строго това правило все още се прилага в SQL днес. Така или иначе терминологията си остана.

Уникален: ключова дума, използвана за указване, че даден индекс не може да приема дублиращи се записи. Уникалните индекси очевидно са отлично средство за налагане на първични ключове. Доколкото думата „уникален“ се използва в контекста на ЛОГИЧНИЯ дизайн, тя е излишна, небрежна, ненужна и объркваща. Ключовете (т.е. първичните ключове) са уникални по дефиниция.

person Erwin Smout    schedule 07.11.2009

1) primary key е набор от един или повече атрибути, които уникално идентифицират кортеж в релацията.

2) foreign key е набор от атрибути от релационна схема, които могат да бъдат уникално идентифицирани кортежи от друга релационна схема.

person aishwarya g    schedule 04.02.2012
comment
Кортежът е колекция от стойности на данни, които идентифицират характеристиките на даден обект. - person aishwarya g; 04.02.2012

  1. Първичен ключ е колона или набор от колони, които уникално идентифицират ред в таблица. Първичният ключ трябва да бъде кратък, стабилен и прост. Външен ключ е колона (или набор от колони) във втора таблица, чиято стойност трябва да съответства на стойността на първичния ключ в оригиналната таблица. Обикновено външен ключ е в таблица, която е различна от таблицата, чийто първичен ключ трябва да съвпада. Една таблица може да има множество външни ключове.
  2. Първичният ключ не може да приема нулеви стойности. Външните ключове могат да приемат множество.
  3. Можем да имаме само един първичен ключ в таблица. Можем да имаме повече от един външен ключ в таблица.
  4. По подразбиране първичният ключ е клъстерен индекс и данните в таблицата на базата данни са физически организирани в последователността на клъстерен индекс. Външните ключове не създават автоматично индекс, клъстериран или неклъстериран. Можете ръчно да създадете индекс на външен ключ.
person Khadija    schedule 22.02.2016

Първичният ключ основно предотвратява дублирането и показва уникалността на колоните. Външният ключ показва основно връзката на две таблици

person Alex alais    schedule 17.01.2018