适用于以下场景的数据库架构是什么?

时间:2015-11-27 16:54:56

标签: database design-patterns database-design schema

我有newsid和关键字。现在我以多种方式将关键字映射到newsid。 例如

**keyword**     **Newsid**
FIFA           221,123,133
Stack          12,2
dragon         23,577,33

此外,我还有一个映射,应该为特定用户的每个关键字存储优先级 例如 让我们假设用户"标记"有以下关键字优先考虑他: -

**Keyword**     **priority**
apple           0.5
jeff jones      0.9 
sugar           0.3



Use cases 
1)to get all the news id that are mapped to a specific keyword 
2)to get all the keyword that are mapped to a specific news id
3)To increase the value of priority for keyword x by value y for user z
4)Retrieve the list of all keywords
5)add a new keyword r for user s with priority f

请注意,关键字不是预先确定的,可以增加到任意数量,新闻和用户也是如此。

到目前为止有缺陷的解决方案 我有一个具有以下结构的数据库

Table -News(newsid,story)
Table -Keyword(keyword,[list_of_news_id seprated by comma])
Table -User_preference(userid,[(keyword1 -priority1),(keyword2-priority2)...])
Table -User(userid,name)

我的解决方案的问题是,要查询映射到特定ID的关键字,我需要处理关键字表的所有元组。

此外,为了更新特定用户的某个关键字的优先级,我必须首先为他检索所有关键字优先级对(因为它们位于公共列中),然后选择我想要的关键字并使用某些关键字手动更改它文本处理并用新值替换值。

请为我建议一个合适的数据库架构,该架构满足我的所有用例要求,并且每次添加新关键字/新闻/用户时都不需要更改数据库架构。

提前致谢。

1 个答案:

答案 0 :(得分:1)

USER可以很多 KEYWORD 许多 KEYWORD

可以使用USER

所以USERKeyword多对多关系

NEWS可以很多 KEYWORD 许多 KEYWORD

可以使用NEWS

所以NEWSKeyword多对多关系

如果您使用join table

USER TABLE:

ID | NAME |ETC..

KEYWORD TABLE:

ID | KEYWORD | DESCRIPTION | ETC...

USER_KEYWORD表:

ID | USER_ID | KEYWORD_ID | PRIORITY 

新闻表:

ID | TITLE | ETC...

NEWS_KEYWORD表:

ID | NEWS_ID | KEYWORD_ID