如何设计用于存储和检索搜索统计信息的数据库表结构?
Posted
技术标签:
【中文标题】如何设计用于存储和检索搜索统计信息的数据库表结构?【英文标题】:How to design a database table structure for storing and retrieving search statistics? 【发布时间】:2009-02-05 23:19:23 【问题描述】:我正在开发一个具有自定义搜索功能的网站,我想收集有关用户搜索内容的统计信息。
不是对网站内容进行全文搜索,而是对公司进行搜索,搜索方式如下:
按公司名称 按区号 按提供的服务 ...如何设计用于存储搜索统计信息的数据库? 哪些信息最相关?我应该如何查询它们?
【问题讨论】:
【参考方案1】:嗯,这取决于不同搜索模式的工作方式,但通常我会说一个有 3 列的表格可以工作:
SearchType SearchValue Count
每当有人进行搜索时,假设他们搜索“公司名称:Initech”,首先查询表中是否存在 SearchType =“公司名称”(或您提供的任何枚举/id 值)的行此搜索类型)和 SearchValue = "Initech"。如果已经有一行,请通过递增 Count 列来更新该行。如果此搜索还没有一行,请插入一个计数为 1 的新行。
通过这样做,您在以后查询它时会有很大的灵活性。您可以找出每种类型最受欢迎的搜索是什么:
... ORDER BY Count DESC WHERE SearchType = 'Some Search Type'
您可以找出最流行的搜索类型:
... GROUP BY SearchType ORDER BY SUM(Count) DESC
等等
【讨论】:
这也是我的设计。我想知道该设计是否有任何类型的 WWGD(谷歌会做什么?)。或者一些巧妙的技巧。【参考方案2】:这是一个非常笼统的问题,但我会这样做:
选项 1 如果要严格区分所有三种搜索类型,请为每种类型创建一个表。对于公司名称,您可以简单地存储 CompanyID(假设您的网站正在维护公司列表)和搜索计数。对于区号,存储区号和搜索次数。如果区号不存在,请插入。提供的服务主要取决于您的设置。最通用的方法是存储关键字和搜索计数,如果还没有,则再次插入。
您也可以选择存储搜索日期信息。例如,您将有一个包含提供服务关键字和唯一 ID 的表。您将拥有另一个表,该表具有该 ID 的 FK 和 SearchDate。这样一来,您就可以随着时间的推移理解数据,同时最大限度地减少存储空间。
选项 2 对所有搜索一视同仁。一个包含一个关键字列和一个计数列的表,如果需要,可以合并 SearchDate。
【讨论】:
【参考方案3】:你可能想检查一下:
http://www.microsoft.com/sqlserver/2005/en/us/express-starter-schemas.aspx
【讨论】:
以上是关于如何设计用于存储和检索搜索统计信息的数据库表结构?的主要内容,如果未能解决你的问题,请参考以下文章