2011-07-25 4 views
1

データベース設計に関する簡単な質問。データベーステーブル。それらを広げて、またはそれらを一緒にヌル?

私はUserのデータをデータベースに保存しているので、ユーザーに関連付けられた2つのデータ形式を2つ(一見して)識別できます。 アカウントデータおよびプロファイルデータ。アカウントのデータは、ユーザーに不可欠であり、サービスを利用する能力(数または全く記録ができます/になり、一方、

ほとんどのプロファイルデータは、(ができ、多くの場合、NULLになります)、オプション、および不要ですNULL

1-to-1として2つのテーブルに分割する利点はありますか?単なるデザインの観点からは論理的だと思われますが、話すときはこれが普通です(good)?

答えて

3

論理設計の観点からは、エンティティタイプは、それが持つ属性によって定義されます。独自の属性セットはそれぞれ異なるものを定義し、別の理由がない限り独自のテーブルに格納する必要があります。どの属性がどの表に属しているかを確認するには、標準形式や原則の原理などの設計原則を使用します。

これを実行する利点は、存在しない属性値にnull値またはダミー値を作成する必要がないことです。その方法でヌルを使用すると、ほとんどの場合、エラー、あいまいな結果、後の妥協が招かれます。

3

私は、プロファイルとアカウントのデータを別々のテーブルにすることをお勧めします。私はそのスタイルを何度も見て使用しました。

+0

ありがとう@i_forget - 利点はどこにあるのですか?例えば;ユーザーが作成されると、 'Account'テーブルと' Profile'テーブルの両方に行が作成されます。違いは、 'Account'データだけが必要である(*と' Profile'データは後で追加することができる*)ので、 'Account'行は' Profile'行が単なる 'NULL'の集合である値。 'Profile'行は、データがそれにプッシュされるまで未作成のままにしておかなければなりません。 – Dan

+0

ユーザーは、ユーザーが何かを追加するまでプロファイルの日付エントリを作成せず、プロファイルデータの所有者/所有者を簡単に知ることができます。重要なアカウントテーブルに影響を与えずに、より多くのプロファイルデータ列を追加することができます。行レベルのロックとトランザクションにアカウント情報とinnodbが必要な場合は、プロファイルデータを検索可能にしたい場合は、 myisamのフルテキストインデックスを使用してください... – plague

+2

質問を作成するときは無関係です。両方の表がOUTER JOINEDであるビューを使用すると、データをプロファイル側に置くたびに単独で作成されます。 –

関連する問題