我有一个需要插入数据的表。
表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
中重复
销售表
您正在尝试进行反规范化。
理想情况下,在规范化设计中,您只需将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