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

Композитен първичен ключ sql връзка

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

Така че във вашия случай - TableTwo задължително справка TableOne(ReportID, Date)

Единственият начин да се заобиколи това е да се създаде UNIQUE INDEX на TableOne (ReportID) - тогава можете да създадете препратка към външен ключ само за това уникално ограничение.

Но тогава възниква въпросът:защо не е ReportID само първичния ключ, ако вече е уникален (тъй като можете да поставите UNIQUE INDEX върху него) и НЕ NULL (тъй като е част от съставния PK)?

Стъпка 1:създайте UNIQUE INDEX :

CREATE UNIQUE NONCLUSTERED INDEX UIX_TableOne ON dbo.TableOne(ReportID);

Стъпка 2:създайте външния ключ от TableTwo :

ALTER TABLE dbo.TableTwo
ADD CONSTRAINT FK_TableTwo_TableOne
FOREIGN KEY(ReportID) REFERENCES dbo.TableOne(ReportID)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DATEDIFF() срещу DATEDIFF_BIG() в SQL Server:Каква е разликата?

  2. Мога ли да се свържа към SQL Server, който е външен за моята мрежа?

  3. Linux - PHP 7.0 и MSSQL (Microsoft SQL)

  4. Предоставяне на разрешения на ниво таблица в SQL Server

  5. Скъсяване на таблица в рамките на транзакция