0

このメンバーシップとは何かを要約すると、次のようになります。

ツールを使用して 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

これが間違った方法である場合は、私に知らせてください。

4

0 に答える 0