使用链接指标设计成员资格数据库

时间:2012-11-29 15:01:44

标签: mysql database database-design

总结一下这个会员资格是什么:

用户将使用工具查找网页网址,系统会在其上运行指标(Google Pagerank,SEOMoz PA& DA,Alexa排名等)。用户将能够保存这些网页及其指标并将其导出。

说我有这些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

如果这是错误的方法,请告诉我。

0 个答案:

没有答案