我工作的一个项目,我有以下(编辑)的表结构:(MySQL的)数据库设计用于标记多个源(MySQL的)
Blog
id
title
description
Episode
id
title
description
Tag
id
text
的想法是,该标签可应用于任何博客或剧集(以及其他类型的资源),如果用户不存在于标签表中,则可以由用户创建新标签。
标签的用途是用户将能够搜索网站,结果将搜索网站上的所有类型的材料。另外,在每篇博客文章/剧集说明的底部,它都会有一个该项目的标签列表。
我想过了很多关于搜索机制,但我想它会在OR搜索和AND搜索之间灵活,如果这对选择有任何影响,并且可能允许用户筛选特定类型的结果的来源。
本来我是打算创建多个标签映射表:
BlogTag
id
tag_id
blog_id
EpisodeTag
id
episode_id
tag_id
但现在我不知道如果我将与更好:
TaggedStuff
id
source_type
source_id
tag_id
凡SOURCE_TYPE将是一个整数,关系到能否它是一个Episode,Blog或其他一些我没有包含在上述结构中的类型,并且source_id将作为该特定表中的参考。
我只是想知道最佳结构是什么,这是第一选择还是第二选择?
我有一种感觉,这是我走的路。以此为基础开始,因为它是“正确的”标准化设计,那么如果/当涉及到提高系统效率时,我可以开始寻找加快速度的方法。 – 2011-06-08 16:53:15
是的,正如我在别处的另一个答案中写的,有三个主要概念如何为泛化创建表。但最常见的是拥有泛型类型和所有子类型的表格。它有许多优点,但也有一些缺点,比如更多的JOIN(可能会减慢速度),当你仅仅从泛化中知道主键时,获得整个实体会有点棘手。 ( - >我必须加入什么表格?Episode或Blog?)另一种方式很容易,但这就是你经常做的事情。 – 2011-06-08 17:07:11