このメンバーシップとは何かを要約すると、次のようになります。
ツールを使用して Web ページの URL を検索するユーザーがおり、システムはメトリック (Google Pagerank、SEOMoz PA & DA、Alexa ランクなど) を実行します。ユーザーは、これらの Web ページとそのメトリックを保存し、エクスポートすることができます。
これらの MySQL テーブルがあるとします。
Users_table
----------
user_id PK
login_name
other_user_stuff...
Users_Links_table
----------------
user_id FK
link_id FK
Links_table
-----------
link_id PK
page_url
ところで、このデザインが悪いと思われる場合は、お知らせください。
私の質問は、リンクのメトリックをどのように保存すればよいですか? Links_table を拡張する必要がありますか? 方法 A。
Links_table
-----------
link_id PK
page_url
metric1
metric2
more metrics down the road ...
または、メトリックを別のテーブルに配置する必要がありますか? 方法 B。
Link_Metrics_table
------------------
metric_id PK
link_id FK
metric_type (string)
metric_value (string)
それともこうあるべき?方法 C.
Link_Metrics_table
------------------
metric_id PK
metric_type_id FK
link_id FK
metric_value
Link_Metrics_Types_table
------------------------
metric_type_id PK
metric_type_name
それとも方法D?
Link_Metrics_table
------------------
metric_id PK
link_id FK
metric1
metric2
metric3
metric (n+1)
誰かがこれを設計する方法に光を当てることができれば、特に今後追加される可能性のあるメトリックタイプを説明するために、非常に高く評価されます。ありがとう。
編集:
これに対処したので、特定のクエリを実行する方法がわからないという問題に遭遇しました。
選択したデータベース構造 (方法 C) を考えると、次のような結果セットを取得するためにクエリをどのように記述すればよいでしょうか。
link_id link_url metric_1 metric_2 metric_3 metric_n+1
------------------------------------------------------------------------------------
1 google.com metric_1_val metric_2_val metric_3_val metric_n+1_val
特定のメトリックが存在する場合と存在しない場合があります。
ありがとう。
編集:
私はそれを理解したように見えます、私はこれを使用しました:
SELECT
l.link_id,
l.page_url,
IF(t.metric_type_id=1, m.metric_value, 'N/A') AS metric_1,
IF(t.metric_type_id=4, m.metric_value, 'N/A') AS metric_2
FROM
Links_table l,
Link_Metrics_table m,
Link_Metrics_Types_table t
WHERE
l.link_id=m.link_id AND
m.metric_type_id=t.metric_type_id
これが間違った方法である場合は、私に知らせてください。