2016-08-25 8 views
2

私は、ユーザーが望むメトリックを作成して、時間の経過とともに値を記録できるようにしたいと考えています。それ以外の唯一のアクションは、選択したメトリック/時間枠のデータ傾向を表示できることです。このタイプのスキーマを正しく配置するにはどうすればよいですか?

私はこのように私のテーブルを構造化:

Table: Metric 
Fields: id int prim key, name text 

Table: MetricPoint 
Fields: id int prim key, metric_id int (foreign key to Metric.id), value real, timestamp long 

が、これはそれを行うための正しい方法ですか?あるいは、追加された各メトリックに対して動的に新しいテーブルを作成する必要がありますか?それとも列にするのか?

私はそれが明らかにアンチパターンとみなされるエンティティ - 属性値のモデリングを、使用しているため、この電流配置が悪かったと言われていました:https://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model

答えて

1

は、各メトリックの新しいテーブルを作成しないでください。新しい指標に新しい列を追加しないでください。あなたのアプローチは正しいと思われます。

新しいオブジェクトを再設計/作成せずに新しいデータを入力できる場合は、正しいパスにあります。

EAVに関して:あなたがスキーマが何であるかわからないときは、カバーする必要があるものをカバーできるスキーマを構築しようとします。それは悪夢であり、実際には使用すべきではありません。あなたのケースでは、スキーマが何であるかを正確に知っています(メトリック、メトリック属性)。値が何であるかは正確には分かりません。

+0

誰かが私がそれを構造化した方法は、それがアンチ・パターンと呼ばれていたので、間違っていたと言いました。 EAXフォーム?編集:EAVフォーム、https://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model – user6757597

+0

これは標準的な1:Mの関係であり、必要なものについてのあなたの説明ごとに完全ですトラック。誰でも詳細な説明が必要な場合は、ここに返信してください。なぜそれらが間違っているのかを伝えることができます(実際はこれは基本的なものです)。 – jleach

+0

私のコメント – user6757597

関連する問題