MySQL表主索引 - 自动编号与两列

时间:2013-12-07 20:47:44

标签: mysql database

第一次询问StackOverflow。我正在创建一个MySQL数据库,我有两个表

  • 公司表(company_id,company_name等),其中将company_id作为主键(最多12个字符)*
  • 和另一个表是其公司代表(最多五个)与字段(company_id,person_last_name等)。代表表没有自然主键。

我将在company_id字段上执行JOIN查询。一切正常但我想使用适当的约定并最大化访问速度。

问题:最好将自动增量整数主键添加到代表表中,即使它永远不会被我使用或添加person_count列并使两列成为主列表index(company_id,person_count)?

SQL示例:

SELECT company.company_id, company.company_name, representatives.person_last_name
FROM company INNER JOIN representatives 
  ON company.company_id = representatives.company_id;

代表表格选项1: company_id(非唯一索引),person_last_name,auto_id(自动增量整数pri)

N123456789012, JONES, 1
N123456789012, SMITH, 2
N123456789012, JONES, 3
N123456789012, WHITE, 4
N123456789012, BLACK, 5
P1234, WILLIAMS, 6
P1234, WILLIAMS, 7

代表表格选项2:

[company_id, person_count](pri index), person_last_name

N123456789012, 1, JONES
N123456789012, 2, SMITH
N123456789012, 3, JONES
N123456789012, 4, WHITE
N123456789012, 5, BLACK
P1234, 1, WILLIAMS
P1234, 2, WILLIAMS

我没有创建原始数据,也无法控制company_id是文本字段。

提前致谢

1 个答案:

答案 0 :(得分:0)

除非你有充分的理由做出不同的事情,否则我建议你自动增加单列PK。能够通过简单的int引用每个唯一的行是非常方便的。你现在可能没有用它,但将来你可能会有一个。即使您必须对表执行某些手动维护(手动删除或更新某些行),简单的PK也会派上用场。

但是,如果您希望数据库强制执行每个公司限制的5个人,我还会使用person_count列,为其添加一个约束,使其只能在1到5之间,并为(company_id)添加唯一索引,person_count)。这样,你就可以获得两全其美的效果。