SQL Вставить в таблицу с 2 неуникальными первичными ключами - PullRequest
0 голосов
/ 27 марта 2020

У меня есть таблица, в которую мне нужно вставить данные.

Таблица Sales имеет 4 столбца

  • CustomerValueType_id (int)
  • Customer_id (int)
  • Value (NVARCHAR)
  • Customer_name (NVARCHAR)

CustomerValueType_id, Customer_id являются внешними ключами, которые не являются уникальными, CustomerValueType_id соответствует типу значения, в то время как Customer_id соответствует Customer_name.

Мне нужно добавить дополнительные данные о клиентах в столбец Value, но как мне убедиться, что данные соответствуют правильным CustomerValueType_id и Customer_id и имя каждого клиента должно быть повторено в Customer_name

Таблица продаж

1 Ответ

0 голосов
/ 27 марта 2020

Вы пытаетесь сделать денормализацию.

В идеале, в нормализованном дизайне вы просто сохраните parent_ids в дочерней таблице. Если вы хотите видеть поля parent_name, вы должны получить их на основе условий JOIN.

Но, поскольку вы храните оба идентификатора, имя в дочерней таблице, я бы предложил вам создать составной Внешний ключ в дочерней таблице, так что комбинация всегда присутствует. Также сделайте эту комбинацию как составной первичный ключ в родительской таблице.

-- Parent Table PRIMARY KEY
ALTER TABLE dbo.CustomerValueType 
ADD CONSTRAINT PK_CustomerValueType 
PRIMARY KEY CLUSTERED (CustomerValueType_id, Value);
GO

--Child Table FOREIGN KEY
ALTER TABLE dbo.Sales 
ADD CONSTRAINT FK_Sales_CustomerValueType 
FOREIGN KEY (CustomerValueType_id,Value) 
REFERENCES  dbo.CustomerValueType(CustomerValueType_id,Value);
GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...