SQLServerテーブルがあります。
+----+-------------+-------------------+
| 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
andCompanyCode
フィールドは一意の会社を指定します。これにより、aは常にCompanyID
同じCompanyCode
(およびその逆)になり、2つの会社が同じCompanyID
および/またはを持つことはありませんCompanyCode
。
が一致する既存の場所と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テーブルの設計について少し背景を説明する必要があると思います。
まず、これは私の質問を説明するための単なる模擬テーブルのデザインです。私の実際のテーブルは企業とは何の関係もありません。
次に、私の実際のテーブルは、Service1がを作成しDeviceID
、Service2がマイクロデバイスに存在するを収集する2つのWebサービスの仲介者です。SerialNumber
また、私の実際のテーブルには、この仲介サーバーが処理しなければならない他の多くの列が含まれています。
この仲介サービスの奇妙な点の1つは、私が話しているテーブルでは、DeviceIDとSerialNumberの両方にNULLを許可する必要があることです。これはすべて、どのサービスが最初にレコードを送信したかによって異なります。話しすぎて元の質問のトピックから外れましたが、正規化を破ることに関して多くの問題が発生していたため、テーブルの例を明確にする必要があると思いました。