注释为数据库中的普通节点

时间:2013-05-21 16:59:24

标签: database database-design content-management-system database-schema

我不是数据库专家。所以我只是把它作为初学者。 我将设计一个数据库但是我不确定我在做什么在数据库设计中是对还是错。 该网站应包含文章和帖子,每个帖子可能有几条评论。 我决定将所有文章,帖子和用户个人资料视为节点。 所以我创建了一个名为“node”的表,每个“node”都有一个“content”作为TEXT。 现在我在想是否应该将注释视为“节点”,或者我应该将不同的表作为“comment_nodes”。 我正在寻找有效的方法。

所以,总而言之:将评论视为普通节点是否可以?

感谢

2 个答案:

答案 0 :(得分:0)

如果您使用MySQL,则您的设计不正确。

基本上,您必须以表格,列和行的形式考虑数据。每个表应代表一个业务实体,而不是抽象的东西。列表示业务实体的属性,行是项(业务实体的实例)。您需要定义主键和外键。

您需要为列提供适当的类型并定义索引以允许快速搜索。

所以只是举个例子

=================================
|       Post table              |
=================================
| id    |   Title   |   Body    |



=================================
|       Comment table           |
=================================
|id     |   Post id |   Text    |

我将从MySQL的基础教程开始(虽然不能推荐)。如果这个答案太基础,请道歉。

答案 1 :(得分:0)

这称为表继承,这不是一个坏主意。例如,在Drupal中,大多数事情都是“节点”。

它的主要优点是可以让外键指向稍微不同的东西(同一父类型)。

我会在你的情况下使用类表继承。你可以这样做:

NODE
id

NODE_POST
id pk fk node(id)
title
body

NODE_COMMENT 
id pk fk node(id) 
body 
post_id fk node_post(id) 
parent_comment_id fk node_comment(id)

无论如何,Google为Martin Fowler提供表继承,并确保您了解其含义。

如果您正在使用PHP,那么Doc​​trine将帮助您继承。

如果你想要嵌套评论,我也建议使用Postgres,因为Postgres比MySql更好地进行分层查询。