Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server 2016:Създайте връзка

Можете да създадете връзка между таблици с помощта на GUI или SQL скрипт. Тук демонстрирам и двата метода.

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

Тук ще създадем следните връзки.

Методът

Ето как ще го направим:

  • Ще използваме SQL за да създадете Албумите таблица и една връзка.
  • Ще използваме GUI за да създадете другата връзка.

По този начин ще видите и двата метода за създаване на връзка.

Трябва да създадем само една таблица, защото вече сме създали две от тези таблици по-рано в този урок ( Изпълнители таблица чрез GUI и Жанрове таблица с помощта на SQL).

Създайте връзка с SQL

Отворете нов прозорец за заявка в SSMS и изпълнете следния код:

CREATE TABLE Albums
 (
  AlbumId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  AlbumName nvarchar(255) NOT NULL,
  ReleaseDate date NOT NULL,
  ArtistId int NOT NULL,
  GenreId int NOT NULL
  
  CONSTRAINT FK_Albums_Artists FOREIGN KEY (ArtistId)     
    REFERENCES dbo.Artists (ArtistId)     
    ON DELETE NO ACTION    
    ON UPDATE NO ACTION    
);

Първата част от това изявление създава таблицата.

Последната част определя връзката. Тази част:

CONSTRAINT FK_Albums_Artists FOREIGN KEY (ArtistId)     
    REFERENCES dbo.Artists (ArtistId)     
    ON DELETE NO ACTION    
    ON UPDATE NO ACTION

Първите два реда създават връзката. Те създават ограничение за външен ключ между Albums.ArtistId колоната и Artist.ArtistId колона.

Последните два реда указват какво трябва да направи SQL Server, ако някой се опита да изтрие или актуализира родителски запис, който се препраща от запис в дъщерната таблица. В този случай NO ACTION означава, че изтриването/актуализацията няма да продължи. Потребителят просто ще получи грешка.

Можете да промените това на ON DELETE CASCADE ако искате да можете да изтриете родителя и детето наведнъж (т.е. изтриването ще премине каскадно от родителя към детето). Същата логика важи и за актуализациите, като се използва ON UPDATE CASADE .

NO ACTION е стойността по подразбиране, така че бихме могли да се справим без тези последни два реда код. Въпреки това го включих, защото това е важен фактор, за който трябва да се мисли, когато създавате ограничения за външния ключ.

Какво е ограничение за външен ключ?

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

Това прави колоната в дъщерната таблица външен ключ . Ограничението гарантира, че всяка стойност, която влиза в тази колона (външен ключ), съответства на стойност в колоната с първичен ключ на родителската таблица. Ако някой се опита да въведе стойност, която не съответства на стойност в колоната с първичен ключ на родителската таблица, SQL Server ще изведе грешка.

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

Създайте връзка чрез GUI

Сега ще създадем другата връзка чрез GUI на SQL Server Mangement Studio.

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

  1. Отворете дъщерната таблица в дизайнера на таблици

    Щракнете с десния бутон върху дъщерната таблица (нашите новосъздадени Албуми таблица) и изберете Дизайн от контекстното меню.

    Ако не можете да видите новосъздадената си таблица в браузъра на обекти, вероятно трябва да опресните браузъра на обекти.

    Щракнете с десния бутон върху Таблици възел и изберете Опресняване .

  2. Отворете диалоговия прозорец Връзки с външни ключове

    Изберете Дизайнер на таблици> Връзки... от горното меню.

  3. Добавяне на връзката

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

    Щракнете върху Добавяне за да добавите друга връзка.

  4. Изберете спецификация на таблици и колони

    Нова връзка се появява над другата в Избрана връзка списък с име FK_Albums_Albums .

    Уверете се, че новата връзка е избрана, щракнете върху Спецификация на таблици и колони в десния панел. Отдясно на свойството се появява многоточие.

    Щракнете върху елипсите (... ), за да стартирате диалоговия прозорец Таблици и колони.

  5. Диалоговият прозорец таблици и колони

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

    • Под Таблица с първични ключове: изберете Жанрове като таблицата и GenreId като колоната.
    • Под Таблица с външни ключове: изберете Албуми като таблицата и GenreId като колоната.

    Щракнете върху OK .

    SQL Server ще предложи име за връзката. Можете да редактирате това, ако желаете. В противен случай го оставете така, както е.

  6. Връзката

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

    Щракнете върху Затваряне .

  7. Запазване на връзката

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

    Щракнете върху Да за да запазите и двете таблици.

    Ако изберете Дизайнер на таблици> Връзки... за родителската таблица също ще видите връзката там.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TSQL:Създайте изглед, който има достъп до множество бази данни

  2. как да конфигурирате конфигурационния файл за хибернация за sql сървър

  3. Архивно шифроване на база данни на SQL Server

  4. SQL Server datetime LIKE изберете?

  5. Как да завъртите неизвестен брой колони и без агрегат в SQL Server?