0

インスタンスごとの構成に基づいて複数のインスタンスを実行するシステムを開発しました。

構成では、インスタンスに使用するデザイン、システムにアクセスできるグループなどを定義できます。

インスタンス(サイトと呼びます)はURLによって区別されます

例えば

  • abc.company.org(A)
  • cde.company.org(B)
  • fgh.company.org(C)

ユーザーがアクセスしている現在のURLを確認し、インスタンスに使用する必要のある構成(デザイン、グループ)を確認します。

ユーザーは複数のインスタンスにアクセスできます。これは、ユーザーが関連付けられているグループによってチェックされ、グループの1つがこのインスタンス(サイト)にアクセスできるかどうかをチェックします。

これはすでに設計されています。

しかし、今はuser_settingインスタンスごとに変更可能である必要があります(サイト

サイトAのユーザーは、サイトBの同じユーザーとは異なる国、組織、役職などを持っています(これは、非論理的に見えても、残念ながら当てはまります)。

user_settingsしたがって、このすべての情報を格納し、への外部キーを持つというテーブルを作成しましたsite。ただし、このテーブルに必要なのは上記の列だけかどうかわからないため、このテーブルは時間の経過とともに水平方向に大きくなります。最終的には、サイトごとに変更するために100個の属性を追加する必要があります。

これを設計するためのより良い方法はおそらくありますか?

この設計をさらに正規化した場合に問題が発生するかどうかはわかりません。たとえば、テーブルを作成します(画像では緑色)。

より良い視覚化のために画像を参照してください:

ここに画像の説明を入力してください

誰かこれを経験しますか?提案は大歓迎です...

4

1 に答える 1

1

検討しているテーブル(図の緑色)は、エンティティ属性値(EAV)と呼ばれるアプローチを使用しています。 EAVは一般的にアンチパターンと見なされます。

あなたはグーグルを使ってEAVの悪について多くの、多くの暴言を見つけることができます。私は個人的にEAVの場所があると信じており、ユーザー設定もその1つかもしれません。

ただし、決心する前に、EAVの欠点をよく読んでおく必要があります。

私の見解では、特にほとんどのユーザーがほとんどの設定に値を設定している場合は、非常に広い設定テーブルを使用してもそれほど悪くはありません。

于 2012-06-19T12:50:41.557 に答える