我有一個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
字段指定一個唯一的公司,其中一個CompanyID
將始終具有相同的CompanyCode
(反之亦然),並沒有兩個公司都不會有相同的CompanyID
和/或CompanyCode
。
我想在桌上創建一個規則,如果/當CompanyCode
與CompanyID
匹配的現有CompanyCode
不匹配時,永不允許將記錄添加到表中。
下面是什麼,我不能讓餐桌上出現一個例子:
+----+-------------+-------------------+
| 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
現有記錄。
我希望這個規則以某種方式存在於表上 - 即我不希望這個規則是查詢和/或存儲過程必須管理的業務規則。
我想你可以說,我想執行重複記錄(上CompanyID
和CompanyCode
)當且僅當現有CompanyID
和/或CompanyCode
存在於表。
這是可能做到在表設計水平?或者我堅持不得不在我的腳本中進行管理?
更新
雖然這是不是真的有關我的OP,從我收到的反饋,我想我應該給的CompanyID /企業編碼表的設計有點背景。
首先,這只是一個模擬表設計,試圖解釋我的問題 - 我的真正表與公司無關。
其次,我真正的表是兩個web服務之間的中間人,其中服務1創建一個DeviceID
和服務2 收集一個SerialNumber
存在於微器件。另外,我真正的表格還包含了這個中間人服務器必須處理的許多其他列。
這個中間人服務的一個奇怪的事情是,我說的表必須允許NULLS DeviceID和SerialNumber - 這一切都取決於哪個服務先發送記錄....我說的太多了,而且還沒有解決我原來的問題,但我認爲我必須澄清我的表格示例,因爲我正在爲突破的標準化問題爭論不休。
爲什麼公司代碼在這裏,而不是在公司的表? – 2012-04-04 12:45:59
這就像您在學習規範化時顯示的早期示例之一 - 如果CompanyCode依賴於CompanyID(反之亦然,在這種情況下),應該有一個表格代表該事實一次,然後只有其中一個鍵應該出現在上表中。 – 2012-04-04 12:56:59