1. ホーム
  2. mysql

[解決済み] MySQL: 複数のテーブル、または多くのカラムを持つ1つのテーブル?

2022-04-29 08:22:31

質問

これはデザイン的な質問ですね。

主キーが1つあって(たとえばユーザーのID)、そのユーザーに関連する情報が大量にあるんです。

それとも、1つのテーブルで多くのカラムを持つべきでしょうか?

以前は、アプリケーションの使用データ用のテーブル、プロファイル情報用のテーブル、バックエンドトークン用のテーブルなど、複数のテーブルを用意して、整理整頓していました。

最近、ある人から「そういうやり方はしないほうがいい」「カラムがたくさんあるテーブルがあってもいい」と言われたんです。しかし、これらのカラムはすべて同じ主キーを持っています。

私はデータベース設計の経験が浅いので、どの方法が良いのか、また長所と短所は何でしょうか?

従来のやり方はどうだったのか?

どのように解決するのですか?

情報が1対1(各ユーザーが1つの名前とパスワードを持っている)であれば、1つのテーブルにした方が良いでしょう。なぜなら、結果を取得するためにデータベースが行う必要のある結合の回数が減るからです。データベースによっては、1つのテーブルのカラム数に制限がある場合もあるようですが、通常の場合は気にする必要はありませんし、必要であればいつでも後で分割することができます。

データが一対多の場合(各ユーザーが何千行もの使用情報を持っている)、重複データを減らすために別々のテーブルに分割すべきです(重複データはストレージスペース、キャッシュスペースを浪費し、データベースの保守を困難にします)。

のウィキペディアの記事が参考になるかもしれません。 データベース正規化 この理由については、詳しく述べられているので、興味深い。

データベースの正規化とは、リレーショナルデータベースのフィールドとテーブルを整理し、冗長性と依存性を最小限に抑えるプロセスです。通常、正規化には、大きなテーブルをより小さな(冗長性の少ない)テーブルに分割し、テーブル間の関係を定義することが含まれます。その目的は、データを分離して、フィールドの追加、削除、変更を 1 つのテーブルで行い、定義された関係を介してデータベースの残りの部分に伝搬できるようにすることです。

非正規化 というのも、データを繰り返す方が良い場合があるからです(データを読み込む際のデータベースの作業量を減らすことができるからです)。最初はできるだけデータを正規化し、特定のクエリでパフォーマンスの問題を認識した場合のみ、非正規化することを強くお勧めします。