桌面应用程序的新闻数据库设计

时间:2016-06-12 20:37:07

标签: sql-server database database-design

我正在制作一个处理大量信息的应用程序。此信息是使用某些网络抓取工具检索的,并且是关于新闻的,包含新闻标题,网址,发布日期,类别和内容等数据。已爬网的数据采用XML格式,我会将该信息加载到我的应用程序中。

从那里,10个用户将处理每个新闻并通过阅读标题手动标记新闻的类别。我使用了9个主要类别,每个新闻用户将从0-5决定这个特定新闻属于每个类别的数量。

用户还将按标题搜索新闻,并确定此新闻是否与其他新闻讨论同一事件,或者此新闻是否与其他新闻相似(如有关下午3点足球比赛的新闻和有关a的新闻)足球比赛在下午5点)。

我在制作应用程序本身时没有任何问题,我只需要一些帮助来解决如何设计一个/多个表,这些表可以链接谈论类似事件或同一事件的新闻,因为可能有很多很多可以谈论同一事件的新闻。

到目前为止,我做过类似的事情:

新闻

ID
Title
URL
PublicationDate
NewsContent

类别

NewsID
User_ID
Economy
Politics
Present_Day
Sport
Technology
Showbiz
Culture
Region
World

用户

ID
FirstName
LastName

Category表中的每个类别字段都包含 tinyint 数据类型(我正在使用 SQL Server ),并且我限制了用户可以通过输入的值输入的值检查约束,以便它允许0到5之间的值。我不知道这对于数据库设计到目前为止是否是正确的方法,我需要添加允许添加有关类似新闻或新闻的信息的表。谈论相同的事件,例如表 Similar_News 包含一些字段,如News_ID,SimilarNews1_ID,SimilarNews2_ID等等,并且必须包含有关哪个用户“说出这个”的信息,但这听起来像是有缺陷的设计给我。

感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:1)

以下是一些建议。在CATEGORY表中,您创建了9个不同的列(经济,政治等)。如果几天/几个月/几年后有一个新类别怎么办?在这种情况下,您将不得不修改数据库设计。相反,您可以使用CATEGORY表的以下结构。

CategoryId
Category

还有一个表来存储实际的新闻分类。

Table: NewsCategory
NewsId
CategoryId
CategoryWeight (This will store the rating from 1-5)

如果用户认为新闻不属于某个特定类别,则该表中不会为该类别插入任何行。这样的结构将为您提供更大的灵活性,以便将来插入新类别而无需更改数据库设计。您只需在Category表中插入新行。

为了存储类似的新闻,我建议采用以下方法之一。

创建表事件并在此表中存储事件的详细信息。

EventId
EventDescription

Sample Data
EventId: 55
EventDescription: Euro 2016 Belgium vs Italy

现在,您可以在News表中包含此EventId。这样您就可以获取与此事件相关的所有新闻。

答案 1 :(得分:0)

创建具有n个字段的Similar_News表来存储类似的News_Id并不是一个好主意。你会创建多少个字段? 3? 10?

您正在建模一个n到m的关系,所以我只使用两个字段(如果您想存储用户ID,则为三个字段)。例如,如果New 1类似于news 2和3.而New 3类似于4,则插入行:

New_ID     SImilar_New_Id
--------------------------
1          2
1          3
3          4

另一种方法是使用NOSQL DB来存储灵活的结构,例如:

"News":{
   "User_Id":1,
   "Category"{
        "Economy":3,
        "Politics":4      
    },
    "Similar_News":[1,2,3]
}