我有一个 SQL Server 表:
+----+-------------+-------------------+
| ID | CompanyID | CompanyCode |
+----+-------------+-------------------+
| 1 | 1 | AAAA-123 |
| 2 | 2 | BBBB-111 |
| 3 | 1 | AAAA-123 |
| 4 | 3 | CCCC-999 |
| 5 | 3 | CCCC-999 |
| 6 | 1 | AAAA-123 |
+----+-------------+-------------------+
ID
领域是PK 。
CompanyID
和CompanyCode
字段指定一个独特的公司,其中 a willCompanyID
总是具有相同的CompanyCode
(反之亦然),并且没有两家公司将具有相同的CompanyID
和/或CompanyCode
。
我想在表上创建一个规则,如果/当 a与'匹配的现有位置CompanyCode
不匹配时,将永远不允许将记录添加到表中。CompanyCode
CompanyID
以下是我不允许在桌子上发生的示例:
+----+-------------+-------------------+
| ID | CompanyID | CompanyCode |
+----+-------------+-------------------+
| 1 | 1 | AAAA-123 |
| 2 | 1 | BBBB-111 |<<<< This record should not be allowed
| 3 | 1 | AAAA-123 |
| 4 | 3 | CCCC-999 |
| 5 | 3 | CCCC-999 |
| 6 | 1 | AAAA-123 |
+----+-------------+-------------------+
请注意带有 的记录 与带有ID=2
的CompanyCode BBBB-111
现有记录不匹配CompanyCode of AAAA-123
。
我希望这条规则以某种方式存在于表中——即我不希望这条规则成为查询和/或存储过程必须管理的业务规则。
我想你可以说当且仅当表中存在和/或存在时,我想强制执行重复记录(onCompanyID
和)。CompanyCode
CompanyID
CompanyCode
这可以在表格设计级别进行吗?还是我不得不在我的脚本中管理这个?
更新
虽然这与我的 OP 并不真正相关,但从我收到的反馈来看,我想我应该提供一点关于 CompanyID/CompanyCode 表设计的背景知识。
首先,这只是一个模拟表设计,试图解释我的问题——我的真实表与公司无关。
其次,我的真实表是两个 Web 服务之间的中间人,其中 Service1 创建一个DeviceID
,Service2收集一个SerialNumber
存在于微设备中的。此外,我的真实表包含该中间人服务器必须处理的许多其他列。
关于这个中间人服务的一个奇怪的事情是,我正在谈论的表必须允许 DeviceID 和 SerialNumber 为 NULL - 这完全取决于哪个服务首先发送了一条记录......我是谈论太多并且偏离了我原来的问题的主题,但我认为我必须澄清我的表格示例,因为我对打破正常化感到非常不满。