次のテーブルレイアウトを使用します。
TABLE Something
(
SomethingId
Name
DateCreated
IsObsolete ('Y','N')
PRIMARY KEY (SomethingId)
Foreign Key (SomethingTypeCode)
;
TABLE SomethingType
(
SomethingTypeCode ('1','2','3')
Description
PRIMARY KEY (SomethingTypeCode)
);
PHP / MySQLのセットアップでは、Somethingテーブルで識別されるSomethingTypeCode(1、2、3)ごとに、IsObsolete = Nを1つだけ関連付けることができるという制約またはインデックスを介して制限できる方法がありますか?
それが私が達成しようとしていることを説明することを願っています。これを解決するために何を調べればよいのかわかりません。データベース自体でデータの整合性を可能な限り維持し、それをPHPに拡張したいと思います。
編集:
混乱に応えて、私はVoteyDiscipleの答えを得ています。
EmailTypeCode:P =個人、B =ビジネス、S=学校
これが私のデザインです:
これにより、個人は特定のタイプコードに複数のタイプの電子メール(つまり、2つのビジネス電子メール)を持つことができ、データベースでの重複を回避し、nullを必要としません。私は、IsObsoleteが機能する場所である各カテゴリ(システムで使用されるもの)にアクティブな電子メールを1つだけ持つことに関心があるためです。履歴を保持し、重複を回避し、nullを回避し、ここでシステムに一意の電子メールアドレスが入力されていることを確認できます。
もちろん、これは元の質問で述べたように私の問題も引き起こします。
VoteyDiscipleのアプローチ
間違った(または正しい)描写があった場合は、VoteyDiscipleまでお知らせください。
「特定のタイプに対して1つしか存在できない場合」-システム内で1つだけでなく、一度に1つだけアクティブになります。
「ActiveIdをNULLにすることができます」-NULLは必要ないことを強調し
ました。「または、特定のSomethingレコードを指すことができます。」タイプはレコードを定義します。
上記の私の応答に加えて、これはクエリに元に戻る複雑さを追加するようです。私の回答は、あなたが提示したものについての私の理解に基づいています。私たちはお互いを理解していないか、それは私の側にあるだけです。ご意見をいただければ幸いですが、提示されたとおり、実行可能な解決策とは考えていません。