web-dev-qa-db-ja.com

1対1のリレーショナルテーブルの場合、列を複数のテーブルに分割する価値はありますか

1対1のリレーショナル列を複数のテーブルに分割し、1つのリレーションシップIDでリンクするか、すべての列を1つのテーブルに追加するだけにするか、データベース構造を決定する必要があります。

列の数は約45です。別のクエリで別の列のデータを並べ替える必要があります(クエリごとに1つの並べ替え)。

MyISAMストレージエンジンを使用します。

さらに、テーブルには数百万のデータが含まれます。

6
Prakash

テーブルを分割するかどうかを決定する際に考慮すべきもう1つのことは、すべてを1つのテーブルに入れる場合のテーブルの幅です。多くのデータベースでは、すべてのフィールドの合計長が、許容される合計レコード長よりも広いテーブルを定義できます。ただし、幅を超えるデータをレコードに入れることはできません。したがって、制限を超えている場合は、テーブルを分割することをお勧めします。さらに、ほとんどのデータベースは、幅の狭いテーブルにデータをより効率的に格納および取得できます。したがって、分割するフィールドが元のテーブルのフィールドで常にクエリされるわけではなく、テーブルが大きい場合は、テーブルを分割することが最善の方法となる場合があります。

考慮すべきもう1つの点は、現在1対1の関係にある場合、後で1対多に変更する可能性があるか、または可能ですか?たとえば、移動したいフィールドが住所フィールドであるとします。たぶん、今必要なアドレスは1つだけですが、それらを別のテーブルに置くと、後で複数のアドレスを使用することがはるかに簡単になります。

テーブルを分割する場合は、1対1の関係を維持するためにFKに一意のインデックスを定義してください。

6
HLGEM

関係が1対1の場合、両方向に機能的な依存関係があるように聞こえます。つまり、列は特定のアイテムの情報を表します。

概念モデルにはエンティティがあり、列はそのようなエンティティに属する情報を表します。私の意見では、情報を異なるエンティティに分離する非常に明白な理由がない限り、これらの列は同じテーブルにあるはずです。

2
jap1968