【发布时间】:2015-01-23 17:15:34
【问题描述】:
我有两个用于多语言文章的表格。在第一个表中,我没有文本列(id、authorid、date 等)。在第二个表中,我有文本列(标题、内容等)。
对于第一个表中的每一行,我可以在第二个表中有很多行。例如,对于翻译成三种语言的文章,我在表 2 中有三行。
在表 2 中,列 (id) 具有表 1 的外键,这就是它已经被索引的原因。我无法为表 2 设置唯一的列 ID,因为很明显它不是唯一的。但是,我不能像上面所说的那样在工作台中编辑表 2 中的数据 - 没有主键或非空唯一键。
我在方案中所说的:
Table1{
id
date
authorId
}
Table2{
id
title
content
languageId
}
所以答案 - 如果我为表 2 中的列 (id) 创建主键 - mysql 会为该列再创建一个索引吗?
【问题讨论】:
-
您可能应该有一个
id列以及一个table1ID列(或类似名称),这实际上是您当前的id列。然后,将id设为主键,将table1ID设为外键。 -
索引与主键相关联,所以是的,添加主键会添加索引(在 InnoDB 中也会影响行的存储)。
-
为什么你首先在第二个表中没有主键?只需为其添加一列。但是是的,它会添加一个索引——Another SO Question
-
我不想在这里打开一罐关于 Surrogate vs Natural keys 的蠕虫...
Table2上的逻辑自然主键是来自id的复合键,任何列存储您的语言。这也将创建您的集群索引,因此如果ID是您的主键中的第一列,则所有搜索都将执行得很好。另一种方法是在您的第二个表中添加一个自动递增列,并将其作为主键,您的非聚集索引将保留在ID上,但我认为它需要重建。
标签: mysql sql mysql-workbench