我有几个小表,几个条目和我想知道我是否应该为这些表添加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');
这也可以简化多语言处理
答案 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