mysql小表中的ID


ID in small mysql table

我有几个条目很少的小表,我想知道是否应该为这些表添加一个ID。我在其他帖子中读到,为了获得最佳性能,首选主键。我使用的是InnoDB表。

如果答案是肯定的,那么构建小表格(状态和级别)的最佳方式是什么?是直接叫身份证更好还是直接叫名字更好

我所说的"小"表是指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');

这也可以简化的多语言处理

假设Status和Level值不会更改,我会为这些列使用ENUM类型并设置可能的值,这样就可以避免连接另外两个表。

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

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

是的,您应该为表的每一行都有一个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