我想创建一个包含3个表的数据库,其中一个是用于文章,另一个是用于标签,第三个将帖子与标签相关联,使用post_id和tag_id作为外键引用。
您能解释一下在这种情况下索引(Index)是什么以及它与外键(Foreign Key)的区别,以及它如何影响我的数据库设计吗?
我想创建一个包含3个表的数据库,其中一个是用于文章,另一个是用于标签,第三个将帖子与标签相关联,使用post_id和tag_id作为外键引用。
您能解释一下在这种情况下索引(Index)是什么以及它与外键(Foreign Key)的区别,以及它如何影响我的数据库设计吗?
表上的索引是一种数据结构,可以使对行的随机访问变得快速高效。它有助于优化表的内部组织。
外键只是指向另一个表中相应列的指针,形成两个表之间的参照约束。
在您的Posts_Tags表中,外键是两列。使用外键时,每个外键列必须包含来自所引用的主表的值。在这种情况下,是Posts和Tags表。
Posts_Tags->PostID必须是Posts->PostID中包含的值。
Posts_Tags->TagID必须是Tags->TagID中包含的值。
将索引视为已经为查询/搜索其值提供了增加的速度和效率的列,但代价是增加了数据库的大小。通常,主键是索引,其他需要在网站上进行查询/搜索的列,在您的情况下,可能是帖子名称(Posts->PostName)。
在您的情况下,索引对您的设计几乎没有影响(它们可以提高速度和效率),但外键非常重要,以避免数据损坏(其中包含与帖子和/或标记不匹配的值)。
在mysql中使用外键,需要在两个表上创建索引。例如,如果您想让表b上的字段a_id
引用表a上的id
字段,则必须在a.id
和b.a_id
上都创建索引,然后才能创建引用。
更新:在这里您可以阅读更多相关信息:http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html