TL;DR Нямате нужни за деклариране на "връзка", т.е. външен ключ (FK) за запитване. Но това е добра идея . Когато го направите, FK може да препраща към първичен ключ (PK) или всяка друга УНИКАЛНА колона(и).
PKs &FKs погрешно се наричат "връзки" в някои методи и продукти. Връзките на приложенията са представени с таблици . (Основни таблици и резултати от заявки.) PK и FK са ограничения:те казват на СУБД, че могат да възникнат само определени ситуации, така че тя може да забележи, когато правите определени грешки. Те не са релации, те са твърдения, верни в &за всяко състояние на базата данни и ситуация на приложение. Не е необходимо да знаете ограничения, за да актуализирате и да направите заявка към база данни.
Просто знайте какво означава всяка таблица . Базовите таблици имат значения, дадени от DBA, които ви казват какво означават техните редове. Заявките също имат значения, които ви казват какво означават техните редове. Значенията на заявката се комбинират от значенията на основната таблица успоредно с това как техните резултати се комбинират от стойностите и условията на основната таблица.
image_tbl
-- изображение [Id] е в албум с име [albumName], име [име], датирано е [dateTime] и има коментар [коментар]album_tbl
-- албумът [albumID] се казва [albumName]
Нямате има да декларирате всякакви PK/UNIQUE или FK! Но това е добра идея защото тогава СУБД може да забрани невъзможни/погрешни актуализации. PK/UNIQUE казва, че стойността на подреда за неговите колони трябва да се появи само веднъж. FK казва, че стойността на подреда за неговите колони трябва да се появи като стойност на подреда PK/UNIQUE в реферираната таблица. Фактът, че тези ограничения са валидни за базовите таблици, означава, че определени ограничения се отнасят за резултатите от заявката. Но значенията на тези резултати от заявката са според комбинациите от таблица и условия на заявката, независимо от тези ограничения. Например дали имената на албумите са уникални,
image_tbl JOIN album_tbl USING albumName
-- изображение [Id] е в албум с име [albumName], име [име], датирано е [dateTime] и има коментар [коментар] И албумът [albumID] се казва [albumName]
Единственият проблем тук е, че ако имената на албуми не са уникални, тогава познаването на името на албума на изображението няма да ви каже в кой албум се намира; знаете само, че е в албум с това име. От друга страна, ако имената на албуми са уникални, нямате нужда от album_tbl AlbumID.
Така че, ако имената на албуми са уникални, декларирайте albumName UNIQUE в album_tbl. След това в image_tbl идентифицирайте албума по някаква колона PK/UNIQUE на album_tbl. Тъй като album_id вероятно присъства само с цел идентифициране на албуми, обикновено очакваме той да бъде избран. След това в image_tbl декларирайте тази колона като FK, препращаща album_tbl.
PS индексите обикновено ускоряват заявките с цената на известно време и място. Декларация на първичен ключ в декларация на таблица автоматично декларира индекс. Добра идея е да индексирате набори от колони PK, UNIQUE и FK.