0

プロジェクトに適した構造を構築するための最良の方法を見つけるのに苦労しています。答えは簡単かもしれませんが、設定方法によっては、膨大な数の列またはテーブルが原因で苦労しています。

いくつかのツールがあり、それぞれが多くの顧客に対して実行できます。各ツールには、回答のデータベースに入力する一連の質問があります。ツールの実行後、ツールの出力である別の一連のデータを取り込みます。およそ 10 個のツールがあり、そのすべてが 1500 のデータ ポイントのスプレッドシートに入力されています。ここで苦労します...各ツールは複数回実行でき、多くのツールが同じデータ ポイントを共有します。私の次のプロジェクトは、ツールのデータ入力を開始できるアプリケーションを構築することですが、既に実行されたツールの同じデータポイントを共有するデータのインポートを可能にすることです。

簡単な例: ツール 1 - 会社、ユーザー数、ロケーション数、費用 ツール 2 - 会社、ユーザー数、合計ストレージ、従業員の支払い率

したがって、同じ会社がツール 1 を完了した場合、ツール 2 が既に存在するため、ツール 2 を完了したときに「numberofusers」を入力できるようにする (または入力を申し出る) 必要があります。

要するに、データ要素ごとに 1 つずつ、各データ要素の周りに追加のデータがある 1500 個のテーブルを持つ構造を作成する方が良いでしょうか、それとも 1 つの大規模なテーブルを作成する方がよいでしょうか。

customerID(FK), EventID(fk), ToolID(fk), numberofusers, numberoflocations, cost, total storage, employee pay,.....(1500)

この方法で 1 つの大きなテーブルを使用した場合、それがパフォーマンスにどのように影響するかわかりません。同様に、1500 のテーブルを維持するのはどれほど難しいことでしょう。

もう 1 つの側面は、各フィールドの説明があると便利だということです: numberofusers,title,description,active(bool)。これは、各要素が独自のテーブルにある場合にのみ可能だと思いますか?

考え?提案?長い質問で申し訳ありませんが、ここに新しいです。

4

2 に答える 2

0

正規化については etherbubunny に同意しますが、より大きなデータセットでは、すぐに重要になるパフォーマンスの考慮事項があります。人間が読める情報を表示するために正規化されたデータベースでしばしば必要とされる結合は、中規模のテーブルでもパフォーマンスを低下させる可能性があります。これが、多くのデータ ウェアハウス モデルが非正規化されたデータセットをレポートに使用する理由です。これは基本的に、インデックス作成、アーカイブ、およびパーティション化を多用して、結合されたレポート データを新しいテーブルに事前に構築することです。

多くの場合、パーティショニングを単独で賢く使用することも、クエリ対象のデータセットのサイズを効果的に削減するのに役立ちます。ただし、特定のパラメーターが固定されていない限り、これには通常、かなりのメンテナンスが必要です。

最終的にあなたの場合 (および他のほとんどの場合) では、何が起こっているのかを維持および理解できる方法でビルドし、低速クエリ ログ、説明、および percona のツール セットのようなパフォーマンス監視ツールを介して定期的なパフォーマンス チェックを実行することを強くお勧めします。これにより、実際に何が起こっているかについての洞察が得られ、ここまたは MySQL フォーラムに戻るためのデータが得られます。ここでいつでも推測することができますが、最終的には実際のデータとセットアップが、あなたにとって何が正しいかの原動力になります.

于 2014-04-23T01:44:16.687 に答える