やめたほうがいいテーブル設計 ~テーブルの水平分割、垂直分割~

テーブルの水平分割とは

テーブルの水平分割とは、1つのテーブルを、ある一定のレコード数を基準として2つ以上のテーブルに分けたものとなります。
そのため、水平分割されたテーブルが存在する場合は、テーブル名が異なり、同一のテーブル定義を持つテーブルが複数作成されることになります。

テーブルの垂直分割とは

テーブルの垂直分割とは、1つのテーブルをカラムの数で分割したものとなります。

水平分割、垂直分割の問題点

  • 正規化のルールにのっとたテーブル分割でない

水平分割も垂直分割も正規化のルールにのっとたテーブル分割を行っていません。
そのため、正規化のルールにのっとた分割であれば、テーブルの結合で簡単に取得できるデータが、 水平分割や垂直分割では、簡単に取得できなくなる可能性があります。

  • 処理が複雑となる

水平分割を行った場合は、必要なデータが存在するテーブルごとに処理を分岐する必要があります。
また、テーブルをまたいだデータが必要となった場合、水平分割を行ったすべてのテーブルにアクセスすることとなります。

そのため、保守性や拡張性が損なわれることになる場合が多いです。

垂直分割を行った場合は、本来関連のあるはずのデータが複数のテーブルに分割されてしまいます。
そのため、今後のシステムの機能追加により、分割した複数のテーブルアクセスが必要になる場合に不要な結合を行う必要が出てきます。

また、テーブルのカラム追加が必要となった場合に、どのテーブルにカラムを追加すべきかの判断が難しくなります。

上記理由から、水平分割や垂直分割を行うことで処理が煩雑となり、保守性の低いシステムとなってしまいます。

代替が可能である

水平分割も垂直分割も他の正しい方法での代替が可能となります。
そのため、そもそもルール違反をしてまで水平分割や垂直分割を行う必要はありません。

なお、それぞ野の分割方法に対する代替手段は以下のとおりです。<水平分割の代替手段>
リレーショナルデータベースのパーティションの機能を使用する。
パーティションを使用することで水平分割と同等の効果を得ることが可能となります。<垂直分割の代替手段>
カラムの絞り込み(データマート)や、サマリテーブルによる集約を行う。

ただし、カラムの絞り込みは、元のテーブルを残したまま、頻繁にアクセスされるカラムのみを別テーブルとして再定義したテーブルです。
そのため、カラムの絞り込みによる代替を行う場合は、データの同期の検討が必要となります。

テーブル設計について学びたい方へ

達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ

達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ

実践!!データベース設計バイブル

実践!!データベース設計バイブル