tSQL插入到具有2个非唯一主键的表中

  • 本文关键字:唯一 插入 2个 tSQL sql tsql
  • 更新时间 :
  • 英文 :


我有一个需要插入数据的表。

Sales有4列

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

CustomerValueType_idCustomer_id是非唯一的外键,CustomerValueType_id与值类型匹配,而Customer_idCustomer_name匹配。

我需要在Value列中添加额外的客户数据,但我如何确保数据与正确的CustomerValueType_idCustomer_id匹配,并且每个客户名称必须在Customer_name中重复

销售表

您正在尝试进行反规范化。

理想情况下,在规范化设计中,您只需将parent_ids存储在子表。如果要查看parent_name字段,则必须根据JOIN条件获取它们。

但是,在这里,由于您将id和name都存储在子表中,我建议您在该子表中创建复合外键,以便组合始终存在。另外,将此组合作为父表中的复合主键。

-- 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

最新更新