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