Внешний ключ показывает значения null (ssms)

#sql #sql-server #null #foreign-keys

Вопрос:

Я пытаюсь выполнить очень простую задачу — соединить две таблицы с помощью внешнего ключа. Однако после успешного создания ключа столбец в основной таблице заполнен нулевыми значениями.

Я попытался создать связь как со сценарием, так и с помощью опции «Таблица дизайна».

Итак, у меня есть две таблицы — Пловец (имеет 100000 строк)

 CREATE TABLE [dbo].[Swimmer]( [SwimmerID] [int] IDENTITY(1,1) PRIMARY KEY NOT NULL, [FirstName] [nvarchar](50) NOT NULL, [LastName] [nvarchar](50) NOT NULL, [PassportNumber] [nvarchar](20) , [BirthDate] [date] NOT NULL, [Gender] [nvarchar](5) , [Rank] [nvarchar](10) , [CoachID] [int] )  

И тренер (имеет 10000 рядов):

 [CoachID] [int] IDENTITY(1,1) PRIMARY KEY NOT NULL,  [FirstName] [varchar](50) NOT NULL,  [LastName] [varchar](50) NOT NULL,  [PassportNumber] [nvarchar](20) )  

Я хочу соединить их по идентификатору CoachID, поэтому идентификатор столбца CoachID в Swimmer становится внешним ключом, который ссылается на идентификатор столбца CoachID в Coach, однако, когда я это делаю, идентификатор столбца CoachID в Swimmer просто показывает NULL в каждой строке. Моей следующей задачей будет создать отношения «один ко многим» (поскольку один тренер может обучать нескольких пловцов), но сейчас я просто хочу выяснить, почему связь не работает

Комментарии:

1. Как вы добавляете внешний ключ?

2. Вы имеете в виду, что в вашей таблице пловцов есть данные в столбце CoachID, которые исчезают при добавлении внешнего ключа?!?

3. Пожалуйста, поделитесь кодом, который вы использовали, когда пытались добавить внешний ключ. В принципе, вы должны заполнить обе таблицы, а затем вернуться и обновить идентификатор тренера в таблице пловцов на основе некоторой логики или сопоставления… как вы узнаете, какой пловец получит какого тренера? вот в чем твоя проблема.

4. Какой внешний ключ? Там нет ни одного определенного. И столбец внешнего ключа содержит значение, не являющееся NULL значением, только в том случае, если вы INSERT или UPDATE строка указали значение столбца; SQL Server «волшебным образом» не знает, какое значение оно должно быть, когда вы его определяете.

5. Я считаю, что простое создание связи внешнего ключа между двумя таблицами не приводит к автоматическому заполнению значений в вашей Swimmer таблице. После создания связи вам необходимо перейти и обновить Swimmer.CoachId значения, чтобы они содержали значения идентификаторов, указанные в Coach таблице.