0

100万を超えるデータを入力できるツールを開発しています。

現在、私は36列の単一テーブルを設計しました。私の質問は、これらを複数のテーブルに分割する必要があるのか​​、それとも単一のテーブルに分割する必要があるのか​​ということです。

単一の場合、長所と短所は何ですか

複数の場合、長所と短所は何ですか

そして、速度のために使用するエンジンは何になりますか...

私の懸念は、1日あたり少なくとも50000のクエリを持つ大規模なデータベースです。

何か助けは?

4

6 に答える 6

4

はい、データベースを正規化する必要があります。一般的な経験則では、外部キーではない列に重複する値が含まれている場合、テーブルは正規化する必要があります。

正規化には、データベースをテーブルに分割することが含まれ、次のことに役立ちます。

  1. 変更の異常は避けてください。
  2. データ構造への変更による影響を最小限に抑えます。
  3. データモデルをより有益なものにします。

ウィキペディアには正規化に関する情報がたくさんあります。

大量のデータがあり、正規化しない場合、最終的にデータベースを再設計する必要があります。これは、アクセスするコードを変更するだけでなく、遡及的に行うのが非常に困難です。データベースだけでなく、既存のすべてのデータを新しい設計に移行します。

パフォーマンス上の理由から正規化を回避する方がよい場合もありますが、この決定を行う前に、正規化について十分に理解しておく必要があります。

于 2010-12-20T23:47:15.793 に答える
1

まず第一に、フィールドまたはフィールドの属性を繰り返しているかどうかを自問してください。1つのテーブルに、分離する必要のある関係または属性が含まれていますか。3番目の正規形に従ってください...私たちは助けるためにもっと多くの情報が必要ですが、一般的に言えば、36列の1つのテーブルはdbおならのようなにおいがします。

于 2010-12-20T23:49:14.533 に答える
0

場合によります!

その1つのテーブルに単一の「エンティティ」が含まれていますか?つまり、36列すべての属性が単一のものですか、それとも複数の「もの」が混在していますか?

混合されている場合は、正規化する必要があります(それらの間に関係がある別個のエンティティに分離します)。少なくとも第3正規形(3NF)を目指す必要があります。

ベストプラクティスは、可能な限り正規化することです。後でパフォーマンスの問題を特定した場合は、できるだけ非正規化してください。

于 2010-12-20T23:48:41.070 に答える
0

同じ種類の100万行を保存したい場合は、それを選択してください。適切なデータベースであれば、はるかに大きなテーブルでも対応できます。

(アプリケーションから見て)データに最適になるようにデータベースを設計し、それを起動して、後で最適化します。おそらく、パフォーマンスは問題ではないことがわかるでしょう。

于 2010-12-20T23:49:50.460 に答える
0

保存するデータに従ってデータベースをモデル化する必要があります。これは「正規化」と呼ばれます。基本的に、各情報は一度だけ保存する必要があります。それ以外の場合、表のセルは値を含む別の行または表を指す必要があります。たとえば、電話番号を含むテーブルがあり、1 つの列に市外局番が含まれている場合、同じ列に同じ値を持つ複数の電話番号がある可能性があります。これが発生したら、市外局番の新しいテーブルを設定し、目的の市外局番が格納されている行の主キーを参照して、そのエントリにリンクする必要があります。

だから代わりに

id | area code | number 
---+-----------+---------
1  | 510       | 555-1234
2  | 510       | 555-1235
3  | 215       | 555-1236
4  | 215       | 555-1237

あなたが持っているだろう

id | area code    id | number   | area code
---+----------    ---+----------+-----------
1  | 510          1  | 555-1234 | 1
2  | 215          2  | 555-1235 | 1
                  3  | 555-1236 | 2
                  4  | 555-1237 | 2

同じ値の出現回数が多いほど、特に文字列値またはバイナリ データを処理している場合に、この方法でデータを整理すると、メモリが節約され、パフォーマンスが向上する可能性が高くなります。また、市外局番が変更された場合、テーブル全体で更新操作を実行するのではなく、1 つのセルを更新するだけで済みます。

このチュートリアルを試してください。

于 2010-12-21T00:05:02.740 に答える
0

相関関係は因果関係を意味するものではありません。

大量の列が通常悪い設計を示しているからといって、大量の列悪い設計であるとは限りません。

正規化されたモデルがある場合は、1 つのテーブルに必要な数の列を格納します。

于 2010-12-21T09:39:05.823 に答える