【发布时间】:2012-12-14 15:33:50
【问题描述】:
我正在制作一个新闻网站,但我想让用户从 Facebook 插入状态。用户可以在撰写新闻时将状态放在新闻中的任何位置。我想在插入时显示新闻。
这是新闻内容的示例
“一些用户插入文本状态一些其他文本一些其他状态另一个文本另一个状态”
所以我在想在这种情况下什么是好的数据库设计。状态有用户,谁写的,日期和内容。新闻有标题、描述和日期。
我想出了五张桌子。
表格NewsHeader
id
NewsTitle
NewsDesc
NewsDate
User
表格 NewsContent - 仅包含 id 和消息的状态或消息文本
id
content
表格NewsContentDetails - 包含状态的详细信息
id
ContentUser
ContentDate
Table NewsContentDetailsLink - NewsContent 和 NewsContentDetails
的连接表NewsContentId
NewsContentDetailsId
Table NewsHeaderContent - NewsHeader 和 NewsContent
的连接表NewsHeaderId
NewsContentId
这是一个好的数据库设计还是有更好的方法来做到这一点?我担心在显示新闻时我必须在 sql 查询中编写许多 JOIN,这会很慢。
编辑: @hrr 建议的数据库设计
**News:**ID |标题 |内容 |用户 |日期
**Elements:**ID |内容 |用户 |日期 |新闻_ID
但是 elements 中的某些字段会是空的,我认为这不是一个好的选择。
提前致谢:)
【问题讨论】:
-
老实说,我看到的最大问题是名称似乎很笼统。我什至无法理解您是如何尝试建模的。名称应该是描述性的,而这些不是。我更喜欢
[NewsArticleHeader]、[NewsArticleContent]等。我也更喜欢用他们的名字来松散地组织表格。从[NewsArticleHeader]和[NewsArticleContent]相关的名称就可以明显看出这一点。简洁的对象名称可以节省编码时的输入时间,但会因为混淆阅读代码或使用 DB 模式的人而浪费时间。打字很容易。理解是困难的。 -
我编辑了我的问题。我希望现在好些了。
-
是什么让状态变得特别并与全文不同?为什么不合并下来,而你只有一个 nvarchar(max) 字段?
-
其他一些值与状态一起插入 - 例如日期、写入状态的用户、用户的图片等。
-
新闻的内容或状态在被用于创建一个表单语句(news status news status...)后会发生变化还是保持不变,用户无法更改?
标签: sql database database-design data-modeling