基本的に、状況は次のようになります(簡略化された擬似コード)。
私は2つのテーブルの人と国を持っています。
人物テーブル:
KEY INT ID, STRING NAME, STRING COUNTRY
カントリーテーブル:
KEY INT ID, STRING COUNTRY_NAME
クライアントは、カントリーテーブルの内容を制御できるため、リストに郡を追加および削除できます。この国の値は、人物を作成するときにドロップダウンリストに表示されます。人が作成されると、国の文字列の値が人の行の国の列に挿入されます。
私にとって、Personは国への外部キー参照を持つ必要があることは理にかなっていますが、クライアントが国テーブルに表示される内容を制御できるため、使用済みの国を削除することはできないため、それらは別々のテーブルとして保持されます(参照整合性とすべて)。これは私の同僚がこの場合外部キーを使用しないようにした議論ですが、この問題にはもっと良い解決策があるはずだと思います。それで、私の同僚は正しいですか、それとももっと良い解決策がありますか?
クライアントはcountryテーブルの値を追加および削除できますが、countryテーブルから値が削除された場合、その値を使用した作成者はその値を保持する必要があります。