小mysql表中的ID

时间:2016-03-30 18:13:56

标签: php mysql

我有几个小表,几个条目和我想知道我是否应该为这些表添加ID 。我在其他帖子上看到主要关键是优选的,以获得最佳性能。我正在使用InnoDB表。

如果答案是肯定的,那么构建小表(状态和级别)的最佳方法是什么?是直接调用ID或名称更好吗?

“小”表是指3到10行。

表状态:

column ID, name
1, Open
2, Closed
3, Maintenance

表级:

Column ID, name
1, easy
2, medium
3, hard

主表 应该是:

Columns ID, name_item, status_item, level_item
1, name1, 1, 3
2, name2, 1, 1
3, name3, 2, 2

或者:

1, name1, Open, hard
2, name2, Open, easy
3, name3, Closed, medium

如果我将ID放在主表中,我需要运行第二个查询以在界面中显示状态/级别的名称。

更新 一个更好的方法是可能只在小表中存储ID并在我的php页面中写: $level = 'translated_level'.$info_level->ID; echo $this->lang->line('level');

这也可以简化多语言处理

2 个答案:

答案 0 :(得分:1)

假设状态和级别值不会发生变化,我会对这些列使用ENUM类型并设置可能的值,这样就可以避免连接其他两个表。

status_item将为ENUM('Open', 'Closed', 'Maintenance')

level_item将为ENUM('Easy', 'Medium', 'Hard')

答案 1 :(得分:0)

是的,你的桌子的每一行都应该有一个id。大多数表应该有一个主键,每个表只能有一个主键。

您可以将ID保存在主表中,但仍然可以在一个查询中获取所需的数据。

SELECT main.id, main.name_item, status.name, level.name
FROM main
JOIN status ON status.id = main.id
JOIN levels ON level.id = main.id

哪将返回您想要实现的结果

Row ID, name_item, status_item, level_item  
1, name1, Open, hard
2, name2, Open, easy
3, name3, Closed, medium