Не удается сделать связь между таблицами
В базе данных есть две таблицы, которые нужно связать между собой. Таблицы: учитель, должность учителя.
Связь планировал сделать по столбцам Position и Name, где TeacherPosition представляла бы собой зависимую таблицу.
CREATE DATABASE TestDB;
CREATE TABLE Teacher(
Id INT PRIMARY KEY IDENTITY,
Name NVARCHAR(20) DEFAULT null,
Surname NVARCHAR(20) DEFAULT null,
Position NVARCHAR(20) DEFAULT null
)
CREATE TABLE TeacherPosition(
Name NVARCHAR(20) PRIMARY KEY,
Salary INT DEFAULT null,
FOREIGN KEY (Name) REFERENCES Teacher (Position)
)
Однако получаю ошибку
В таблице "Teacher", на которую имеются ссылки, отсутствуют первичные или потенциальные ключи, соответствующие списку ссылающихся столбцов во внешнем ключе "FK__TeacherPos__Name__08EA5793".
Ответы (1 шт):
Вот вам концептуальный пример с данными.
SQL
USE tempdb;
GO
-- DDL and sample data population, start
DROP TABLE IF EXISTS dbo.child;
DROP TABLE IF EXISTS dbo.parent;
CREATE TABLE dbo.parent (ID INT IDENTITY PRIMARY KEY, [State] CHAR(2));
CREATE TABLE dbo.child (
ID INT IDENTITY PRIMARY KEY
, ParentID INT NOT NULL FOREIGN KEY REFERENCES dbo.parent(ID)
, City VARCHAR(30)
);
INSERT INTO dbo.parent ([State])
VALUES ('FL')
, ('TX');
INSERT INTO dbo.child (ParentID, City)
VALUES (1, 'Miami')
, (1, 'Fort Lauderdale')
, (2, 'Austin')
, (2, 'Dallas');
-- DDL and sample data population, end
SELECT * FROM dbo.parent;
SELECT * FROM dbo.child;
SQL для вашего конкретного случая
Первичный ключ родительской таблицы распространяется как внешний ключ на дочернюю таблицу. Это не может быть просто какой-то произвольный столбец, используемый для внешнего ключа.
CREATE TABLE Teacher(
Id INT PRIMARY KEY IDENTITY,
Name NVARCHAR(20) DEFAULT null,
Surname NVARCHAR(20) DEFAULT null,
Position NVARCHAR(20) DEFAULT null
)
CREATE TABLE TeacherPosition(
Name NVARCHAR(20) PRIMARY KEY,
Salary INT DEFAULT null,
Id INT FOREIGN KEY REFERENCES Teacher(ID)
)