2012-11-26 47 views
0

我想将评论存储在灵活的类别和子类别系统中,并且目前正在为此设计数据库结构。我有一个想法如何做到这一点,但我不完全确定它是否无法做得更加优雅和/或高效。这些是我的想法 - 如果任何人都可以评论如何/如何改进,我会非常感激。灵活类别/子类别系统中条目的最佳数据库结构?

(为了保持这个帖子简明扼要,我只列出重要领域的表)

1)的评语是存储在表“审查”。它具有以下字段:

id: uniquite ID, auto-incrementing. 
title: the title that will show up in <head><title>, etc. 
stub: a version of the title without spaces, special chars, etc. so it can be part of the URL/URI 
text: the actual content 

2)所有类别都在同一个表中“类别”

id: unique ID, auto-incrementing. 
title: the full title/name of the categorie how it will be output on the website 
stub: version of the title that will be shown in the URL/URI. 
parent_id: if this is a subcategory, here is the categories.id of the parent category. Else this is 0. 
order_number: simple number to order the categories by (for display in the navigation menu) 

3)现在我需要一个指示器,其评语是在哪些类别。可以在多个。我的第一个想法是将“review_list”字段添加到类别中,并让它包含所有的应该在这个类别中的reviews.id。不过,我认为在类别中添加和删除评论将是一件麻烦和“不雅”的事情。所以我目前的想法是有一个表“review_in_category”,并为每个审查类别关系有一个条目。其结构是:

id: Unique ID, auto-increment. 
review_id: the reviews.id 
category_id: the categories.id 

所以,如果一个评论是在3级不同的类别,将导致在“review_in_category”表3项。

这个想法是,当用户打开www.mydomain.de/animation/sci-fi/时,包装脚本会将URL分解为其部分。如果它找到category.stub =“sci-fi”的多个类别,它将检查哪些类别具有存根“动画”的父类别。一旦确定了正确的类别(大多数情况下存根是唯一的,因此可以跳过此检查)我想从“review_in_category”中选择所有review_id,其中category_id与由包装器脚本确定的category_id匹配。所有review_id都放入数组中。循环将循环访问该数组,并通过“SELECT标题,存根FROM评论WHERE id = review_list [$ counter]”来编写列出所有评论标题的SELECT语句(并使用存根值创建指向它们的链接),然后添加“OR id = review_list [$ counter]“,直到数组完全移动。

所以我的问题是: - 是我创建一个SELECT语句具有潜在的大量“或ID =”部分来处理这种情况还是有更好的变体的“高贵”和/或有效的方式方法? - 使用“分类法”风格表(review_in_category)是否有意义,或者将“会员”/“关系”直接存储在评论或分类表中会更好吗? - 任何其他想法......我刚开始学习这些东西,并感谢任何反馈。

谢谢

回答

0

您的设计看起来很健康。

要检索类别中的所有评论,你应该使用一个连接:

SELECT reviews.title, reviews.stub FROM reviews, review_in_category WHERE reviews.id = review_in_category.review_id AND category_id = $category 
相关问题