Álv*_*lez 5 sql t-sql sql-server sql-server-2008
我需要弄清楚一个设计错误的解决方法,现在修复已经太晚了.我基本上希望重复的数据进入一个特定结构的表来避免它:
CREATE TABLE building (
building_id INT IDENTITY(1, 1) NOT NULL,
address_id INT NOT NULL,
company_id INT NOT NULL,
CONSTRAINT building_pk PRIMARY KEY (building_id),
CONSTRAINT building_fk1 FOREIGN KEY (address_id) REFERENCES address (address_id),
CONSTRAINT building_fk2 FOREIGN KEY (company_id) REFERENCES company (company_id)
);
CREATE INDEX building_idx1 ON building (address_id);
CREATE INDEX building_idx2 ON building (company_id);
/* Prevent dupes */
ALTER TABLE building ADD CONSTRAINT building_uk1 UNIQUE (address_id);
Run Code Online (Sandbox Code Playgroud)
(原始本地化名称已更改,以使其更清晰且与问题相关.)
Acme Inc. 的出口建筑物 API将发送共享相同地址的不同建筑物.删除building_uk1
会破坏某些假设唯一性的功能,此时我们无法承担重大的重写.
我想评估building_uk1
上述公司(company_id=314
)的禁用效果,这可能没有依赖于唯一性的功能.我有什么选择放松building_uk1
,只有在company_id
不是314 时才强制执行?
一个简单的唯一过滤索引就足够了:
CREATE UNIQUE NONCLUSTERED INDEX [IX_building_uk1] ON [dbo].[building]
(
[address_id] ASC
)
WHERE (company_id <> 314)
Run Code Online (Sandbox Code Playgroud)