2010-12-05 14 views
1

私は自分のユーザとmysqlテーブルを持っています...各ユーザはVerified(yes/no)、Member(yes/no)などのような様々な属性を持っています。非常に一般的なケースを.is ...Mysqlアーキテクチャのベストプラクティス:ユーザ属性

私は多分lazynessのために、このような単一の行で私のテーブルを構築するために使用してalwasyてきたか、私は今のところ大きなDBを構築したことがないという理由だけで...

userId | userName | Verified | Member 
--------------------------------------- 
    3213 | Jon  | 1  | 0 

しかし、それは別のテーブルにそれを構築し、後で関係を作成する利点があるのだろうかと疑問に思う

ユーザー表

userId | userName | 
------------------- 
    3213 | Jon  | 

メンバーシップテーブル

memberId | userId | Member | 
-------------------------------- 
    555748 | 3213  | 0  | 

た検証表

memberId | userId | Verified | 
---------------------------------- 
    555748 | 3213  | 1   | 

この2番目の選択肢から真のメリットは何ですか?

+0

あなたは[データベースの正規化](http://en.wikipedia.org/wiki/Database_normalization) – khachik

答えて

4

ここには本当の利点はありませんが、欠点のみです。テーブル間に1対1の関係があり、今では2つのテーブルを結合してユーザーの検証状態を取得する必要があります。また、ユーザーは確認できます(1)未確認(0)か、レコードが存在しない可能性があります。

1対多の関係がない限り、これらの余分なフィールドを同じテーブルに配置することをお勧めします。たとえば、保存する必要がある数がわからないため、ユーザーは別の表に保存した投稿、友人、写真を持つことができます。

+0

に慣れ親しむことができます。 – Francesco

2

最初のやり方では、それは1:1の関係であれば、より少ないスペースしか消費しません。

0

分割のポイントは、1対多、多対1、または多対多のレコードを許可することです。データフィールドに同じ情報が含まれていない場合は、フラットテーブルを使用することをお勧めします。

0

私はおそらくそれを少し簡略化します。メンバーシップ/検証を示すフラグを持つことに価値がないため。テーブルの分離はあなたのためにそれを行います。また、すべてのテーブルにuserIdを持つ必要はありません。おそらく、ユーザーとメンバーの両方のIDを含むUserMemberテーブルがあります。関係があれば十分です。

また、1対1の関係がある場合、同じテーブルにフラグを設定することもできます。 1:xの関係を持つことは、正規化にとってより適切です。

関連する問題