0

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

它的用户将使用工具查找网页 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

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

4

0 回答 0