2010-12-17 5 views
1

データベースの一部のテーブルを少し再設計して統合しています。私たちはかつて2つのテーブルを持っていたところで、'administrators''users 'を組み合わせて、'users'という1つのテーブルに結合しました。その変更を容易にするために、 'user_types'テーブルとの間の1対多のリンクテーブルである'user_user_types'テーブルを作成しました。データベース内でこのデータを構造化するより良い方法はありますか?

'user_types'テーブルを使用する理由は、さまざまなタイプの管理者が存在するためです.1つは、システム内のすべてのものにアクセスできるスーパー管理者です。古い設定では、'SiteAdmin'と呼ばれる'administrators'テーブルにビットフィールドがあり、特定の管理者がスーパー管理者であるかどうかを示しています。この新しいシステムに移行してから、私の考えでは、スーパー管理者になるユーザータイプが'user_types'のテーブルに存在することになりました。しかし、これらのケースで正しいユーザーをそのユーザータイプにリンクするだけです。新しい 'users'テーブルに'SiteAdmin'ビットフィールドを使用したいとします。私はそれは少し冗長だと思うが、余分な負荷があると主張し、'users''user_types'テーブルを一緒に参加させて、特定のユーザーがスーパー管理者であるかどうかを判断する必要があるSQLサーバーでは、

私の質問はどのように優れているのですか? SQLサーバーのヒットは、2つのテーブルに参加することで素晴らしいですか?ビットフィールドをスーパーユーザーにフラグを付けるために 'users'テーブルに追加することを保証しますか?

ありがとうございます!

答えて

3

あなたの再設計は、合理的で道に沿ってより保守的であるようです。私は結合がパフォーマンスに影響を与えることは疑いの余地があります。特に、ログイン時にユーザごとに1回ユーザタイプを問い合わせている可能性が高いからです。

両方のデザインに対していくつかの単体テストを書いて、偽のデータの束をテーブルに埋め込み、フラグを使用して結合に対してタイマーを実行することができます。

0

パフォーマンスの違いは、これらのテーブルのデータ量によって異なります。数百〜数千のユーザー行について話している場合、ソリューション間の違いはありません。何百万人ものユーザーがいる場合や、データへの同時アクセスが大量である場合は、違いが生じることがあります。

0

小さなテーブルになることにパフォーマンスにヒットした場合、私はそれが奇妙なことに気付くでしょう。

大きな問題は、異なるタイプのユーザーを2つの異なる方法で保存してメンテナンスが混乱することです。あなたのソリューションは長期的にはもっと簡単だと思います。

関連する問題