Помогите с первичным ключом в SQL Server (SSMS)
У меня есть таблицы Назначения и Штат и мне нужно сделать внешний ключ в диаграмме, но у меня ошибка
- 'Назначения' table saved successfully 'Штат' table
- Unable to create relationship 'FK_Штат_Назначения'.
The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_Штат_Назначения". The conflict occurred in database "pr1-2", table "dbo.Назначения", column 'номер_записи'.
Назначения
USE [pr1-2]
GO
/****** Object: Table [dbo].[Назначения] Script Date: 2/4/2024 3:40:49 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Назначения](
[номер_записи] [int] NOT NULL,
[кодОтдела] [int] NOT NULL,
[кодДолжности] [int] NOT NULL,
[номер] [int] NOT NULL,
[датаПриема] [date] NOT NULL,
[датаУвольнения] [date] NULL,
[статус] [nvarchar](100) NULL,
CONSTRAINT [PK_Назначения] PRIMARY KEY CLUSTERED
(
[номер_записи] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Назначения] WITH CHECK ADD CONSTRAINT [FK_Назначения_Сотрудники] FOREIGN KEY([номер])
REFERENCES [dbo].[Сотрудники] ([номер])
GO
ALTER TABLE [dbo].[Назначения] CHECK CONSTRAINT [FK_Назначения_Сотрудники]
GO
Штат
USE [pr1-2]
GO
/****** Object: Table [dbo].[Штат] Script Date: 2/4/2024 3:41:01 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Штат](
[кодОтдела] [int] NOT NULL,
[кодДолжности] [int] NOT NULL,
[Кол_во] [int] NOT NULL,
CONSTRAINT [PK_Штат] PRIMARY KEY CLUSTERED
(
[кодОтдела] ASC,
[кодДолжности] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Штат] WITH CHECK ADD CONSTRAINT [FK_Штат_Должности] FOREIGN KEY([кодДолжности])
REFERENCES [dbo].[Должности] ([кодДолжности])
GO
ALTER TABLE [dbo].[Штат] CHECK CONSTRAINT [FK_Штат_Должности]
GO
ALTER TABLE [dbo].[Штат] WITH CHECK ADD CONSTRAINT [FK_Штат_Отделы] FOREIGN KEY([кодОтдела])
REFERENCES [dbo].[Отделы] ([кодОтдела])
GO
ALTER TABLE [dbo].[Штат] CHECK CONSTRAINT [FK_Штат_Отделы]
GO
Ответы (1 шт):
Судя по тексту ошибки, вы сделали не то, что хотели (кодДолжности из Таблицы Штат к кодДолжности в таблице Назначения).
Там нужно выбрать [кодДолжности]:

Учтите, что у вас ключ "PK_Штат = [кодОтдела] & [кодДолжности]". И связь между таблицами длжна быть соответствующей.
P. S. Ещё раз. В Штате уникальность записей по комбинации [кодОтдела] & [кодДолжности]. Поэтому нельзя связать Назначения и Штат только по [кодОтдела] или по [кодДолжности]. Нужно по обоим полям. Но тогда каждое из этих полей в Штате должно быть с уникальными значениями, что противоречит начальным данным ([кодОтдела] - уникальное, а [кодДолжности] - нет).
Поэтому, нужно добавить в Штат уникальное поле [код штата], а в Назначениях заменить [кодОтдела] и [кодДолжности] на [код штата], и связывать две таблицы по [код штата].



