首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何改进这个数据库设计?

如何改进这个数据库设计?
EN

Stack Overflow用户
提问于 2011-11-25 20:38:57
回答 2查看 58关注 0票数 1

我正试图为我当前的项目设计一个数据模型,而且我遇到了麻烦。产品所有者希望有用户、搜索、文档和标签。到目前为止,似乎众所周知的是:

Documents)

  • Searches

  • 用户有搜索-(这些不是数据库搜索,它们是全文搜索,返回大量的

  • 文档<-但是这不需要建模。搜索结果将随着时间的推移而变化。

  • 用户有文档--他们以前从任何搜索

  • 标记中看到的文档都是文本字符串

  • 用户将能够用任意数量的标记标记文档,但是其他用户将无法看到他们的标记

我在这里试图解决两个问题:

每当用户进行搜索时,

  1. 都需要根据以前是否看到返回的文档对它们进行不同的标记。如何?是否合理,只从搜索中收集文档(每次返回10个文档),然后对搜索中具有doc_ids之一的用户的所有文档发出另一个doc_ids查询?似乎clumbsy.
  2. Since用户可以给一个文档几个标记,而由于其他用户看不到它们,我如何在数据库中表示这些标记呢?我如何合理地查询它?我认为属于用户的文档由一个连接表- UserDocuments来表示。然后是几个标签belongTo UserDocuments。,但是我如何按照搜索结果显示标签呢?在我看来,这涉及到我进行搜索,找出我以前见过的文档,然后找到其中哪些文档有标记,然后再次访问数据库中的每个文档,并收集它们的标签。这看起来很极端,不是吗?

有一件事情可能让我的理解混淆了,那就是我正在通过Rails ORM进行思考。我最终将不得不实现在Rails中找到的任何解决方案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-25 22:20:30

一种可能的设计:

代码语言:javascript
代码运行次数:0
运行
复制
   User               
  1|  \1   
   |   \     
   \   N\      
    \   Search                    Document
     \      \1                    1/    /1
      \      \                    /    /
       \     N\                  /M   /
        \   Search-Returns-Document  /     
         \                          /
          \                        / 
           \N                    M/
            User--Views--Document           Tag
                   1\                      1/
                     \                     /
                      \N                  /M  
                   User-Marks-Document-With-Tag
票数 2
EN

Stack Overflow用户

发布于 2011-11-25 20:50:34

希望这将有助于:

  1. 有一个包含user_id、document_id等的Documents_Viewed表。然后,在检索搜索结果时,加入用户和文档上的查看表,这将让您知道他们是否已经阅读了它。
  2. I将有另一个包含user_id、document_id、标记的表Document_Tags,因为您提到的标记是用户依赖的

例如,理论查询将是:

代码语言:javascript
代码运行次数:0
运行
复制
SELECT * FROM Docuemnts d
         LEFT JOIN Document_Viewed dv ON (dv.document_id = d.id AND dv.user_id= ?)
         LEFT JOIN Document_Tags dt   ON (dv.document_id = d.id AND dv.user_id= ?)
         WHERE (search_criteria)

我不确定这是否对你有帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8274007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档