我正在制作一个新闻网站,但我想让用户插入从Facebook状态。用户可以在编写状态时将状态放在新闻中的任何位置。我想在插入的时候显示新闻。
以下是新闻内容的一个例子
“某些用户插入文本状态-其他文本-另一种状态-另一种状态-”
所以我在想,在这种情况下,什么是一个好的数据库设计。状态有用户,谁写了它,日期和内容。新闻有标题、描述和日期。
我想出了五张桌子。
表NewsHeader
id
NewsTitle
NewsDesc
NewsDate
User表NewsContent -只包含来自新闻状态或文本的id和消息。
id
content表NewsContentDetails -包含状态的详细信息
id
ContentUser
ContentDate表NewsContentDetailsLink - NewsContent和NewsContentDetails的连接表
NewsContentId
NewsContentDetailsId表NewsHeaderContent - NewsHeader和NewsContent的连接表
NewsHeaderId
NewsContentId这是一个好的数据库设计,还是有更好的方法来做到这一点?我担心在显示新闻时,我必须在sql查询中编写许多联接,这将是缓慢的。
编辑: @hrr建议的DB设计
新闻:** ID \ Title \ Content \ User = Date **要素:** ID \\ Content \ User \ Date \ News_ID
但是元素中的一些字段将是空的,我认为这不是一个好的选择。
(预先谢谢:)
发布于 2012-12-07 14:06:00
您不需要NewsHeaderContent,除非您希望在多个标题中使用相同的内容,但我认为您不需要它,所以您可以使用两个表:
表NewsHeader
id
NewsTitle
NewsDesc
NewsDate表NewsContent
NewsId
ContentId
Sequence
content
ContentUser
ContentDate您可以使用字段Sequence对内容进行排序。
这个结构中的一些数据的一个例子:
NewsHeader
id NewsTitle NewsDesc NewsDate
1 'First News' 'Some Description' 2012-10-07
2 'Another News' 'Description of News' 2102-12-07NewsContent
NewsId ContentId Sequence content ContentUser ContentDate
1 1 1 'Some Text' NULL NULL
2 1 1 'Some user inserted text' NULL NULL
2 2 2 [Status] User2 2012-12-07
2 3 4 [Some other status] User2 2012-12-07
2 4 3 'Some other text' NULL NULL
2 5 5 'another text' NULL NULL
2 6 6 [Another Status] User2 2012-12-07序列可以被更改,因为ContentUser和ContentDate只在状态时使用,那么您可以使用这些字段来标识文本或状态,或者可以添加一个归档的Type,例如文本的T和状态的S。
这里是我的例子的一个SQLFiddle:SQLFiddle
发布于 2012-11-30 21:46:49
您可以使用一个表作为新闻,一个表用于元素。
新闻:
ID | Title | Content | User | Date元素:
ID | Content | User | Date | News_ID每个元素都会有自己的新闻id!不需要创建额外的“连接”表。
发布于 2012-12-13 19:21:33
我认为,如果您想让read操作非常快(我假设它是一个新闻站点),那么以下设计可能是正确的:
表的总体设计:

当用户想要创建一条新闻消息,如您指出的“某些用户插入文本状态-其他文本-另一种文本-另一种状态-另一种状态”时,他/她可以简单地为每个句子片段选择新闻和/或状态。
在用户创建一个句子之后,您可以获取相关的内容新闻和状态ans,直接将形成的消息存储在一个表中,因此您将有一个为read优化的消息表:
Message
id | message | User id | DateTime缺点是,您可以通过状态或新闻id进行筛选,如果消息或状态发生更改,也不能更新消息。
如果我们假设允许用户更改新闻或状态,或者希望通过新闻id或状态id筛选消息,那么另一种选择是:
存储新闻ids的映射和已引用新闻的消息ids,以及状态ids的映射,以及与片段序列号一起引用状态的消息ids。所以你会:
News-Message-Mapper
News Id | Message Id | Fragment Sequence和
Status-Message-Mapper
Status Id | Message Id | Fragment Sequence片段序列表示状态或消息在整个消息中出现的位置。
现在,如果更新或删除了一个消息或状态,您只需引用两个映射表,或者重新生成这些消息,或者删除它们。
这优化了读取,但是更新很复杂,但是您的引用完整性和规范化规则得到了维护。此外,您还可以通过新闻id或状态id筛选消息。
https://stackoverflow.com/questions/13653618
复制相似问题