データベースの一部のテーブルの設計に問題があります。問題は:実際に、私は、それぞれIDが1、2及び3と、3つのレベルを有するデータベース設計の変更
Level
Id (PK)
Name
Union
Id (PK)
LevelId (FK)
CityId (FK)
PostalCodeId (FK)
CountryId (FK)
:
I 2つのテーブルを有します。そして、ユニオンテーブルでは、1レベルのFKマークを1つしか持てません。たとえば、Level 1のLevelは常にCityに関連付けられているため、LevelIdフィールドには1が入力され、CityIdには対応する識別子が格納されます(他のフィールドはnullになります)。 LevelId 2とPostalCodeId(その他のフィールドはnull)、LevelId 3とCountryId。
今、私はCityIdとPostalCodeIdを同時に参照したいと思いますが、それらはレベルが異なります(レベルテーブルは変更してはいけません、beacuseはマスターです)。
この問題を解決するにはどうすればよいと思いますか?私は2つのソリューションを考えました:
1)エンベロープテーブルのLevel列を削除し、塗りつぶされたパラメータの数をバックエンドで制御します。しかし、Unionの列数(FK)が増えれば、それほど多くの条件を制御する必要があります。そしておそらくそれは非効率的になるでしょう。
2) "新しいレベル"を表すIDで別のレベルを作成します。私は実際のところ、実際のレベルは3つしかないので、最良の解決策ではないと思います。もう1つはレベルのミックスであり、マスターはマスターではありません。
もっと良い解決策があるかどうかわかりませんが、そうでない場合は、これを実行する最良の方法は何ですか。
ありがとうございます。
ここで何をしようとしているのか分かりません。擬似コードの代わりにテーブルの実際のddlを投稿できますか?私にとっては何かがここから少し離れているようですが、私はそれを解決するのに十分なほどよく問題を理解していません。 –
テーブルUNIONを呼び出すことはひどい考えです。 –
あなたのテーブルは、あなたがモデリングしているビジネス/システムの本当の「もの」を表すものとします。その情報を十分に理解していなければ、誰も安全に提案を提供することはできません。あなたは1つの推測をしています - それは役に立つかもしれません。これは間違ったアプローチであると言えます。やり直してください。助けが必要な場合は、モデルとそれが表すものとその使用方法について話し合います。 – SMor