我需要一些SQL结构方面的帮助。 我写文章并希望在我的网站上在线分享,用户可以对它们发表评论。
每篇文章都包含名称,段落,部分和内容块。 您可以将其视为树:article => paragraph => sections =>内容块。 每篇文章都有很多段落,每个段落都有很多段落,每个段落都有很多内容。
现在,我希望用户能够为树中的每个级别添加注释。 为此,我为每个保存静态信息的实体(文章,段落,部分和内容块)创建了一个表。
我的问题是处理动态部分的最佳方法是什么,在哪里存储用户的评论? 什么是最好的解决方案?
感谢。
答案 0 :(得分:2)
我建议它为每个实体创建一个表,用于存储注释的位置。
例如,您可以创建以下表格:
所以每个表都将存储父实体Id,用户ID(如果已注册则为null,如果未注册则为null)和注释。
我之所以建议使用tou来使用不同的表只有一个是以下的:
从某种意义上说,它是一种可扩展的解决方案,您可以在每个注释表中添加仅与父实体相关的自定义字段。如果你以后使用一个表执行该操作,那么表结构会因许多空行或空行字段而变得混乱。
您的表格看起来会有分类和结构化。
如果将来你有大量的评论,你的RDBMS将花费更少的时间从不同的表而不是一个表查询(当使用长文本/ blob字段时,查询变得更重,更慢)。 p>
只使用一个父表设置外部约束很容易,参照完整性检查将花费更少的时间。
答案 1 :(得分:1)
内容表也是动态的,因为可以添加,修改或删除内容。
我会创建一个只包含主键和注释数据的注释表(文本为nvarchar(max)数据类型,作者的外键)。
然后,对于每个内容表,一个引用表,包含来自内容和注释表的PK作为一对外键。从理论上讲,注释可能属于多个内容项,应该在应用程序中防止(注释FK引用的唯一约束可以限制每个内容类型至少一个父项)。
不要忘记内容,评论和参考表的正确索引