总结一下这个会员资格是什么:
用户将使用工具查找网页网址,系统会在其上运行指标(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
如果这是错误的方法,请告诉我。