Php 数据库:存储索引或键值

Php 数据库:存储索引或键值,php,mysql,database,Php,Mysql,Database,我正在使用PHP,MySql 例如: $type = array( "owner", "agent", "representative", ); 在DB中存储的首选方式是什么 将其存储为索引,0表示“所有者”,1表示“代理”。。。 用键值存储它。使用重新创建上述代码 $type = array( "OWNER" => "owner", "AGENT" => "agent", "REPRESENTATIVE" => "repres

我正在使用PHP,MySql

例如:

$type = array(
    "owner",
    "agent",
    "representative",
);
在DB中存储的首选方式是什么

将其存储为索引,0表示“所有者”,1表示“代理”。。。 用键值存储它。使用重新创建上述代码

$type = array(
    "OWNER" => "owner",
    "AGENT" => "agent",
    "REPRESENTATIVE" => "representative",
); 
然后将值存储为所有者、代理

我倾向于使用方法2,因为对我来说它增加了可读性

方法1 -低可读性 +好成绩

方法2枚举 +高可读性 -低性能 -添加更改数据库设计所需的密钥


最佳做法是什么?你们用什么

如果使用的是一组相对有限的值,请使用枚举数据类型。它可以让您以人类可读的形式读写,但在幕后,它通常会将其存储为int。

我更喜欢方法1。就性能而言,这是一个比方法2更好的选择。如果您关心可读性,我将创建一个名为permission\u types的表:


然后,您可以加入该表,并且在不搜索字符串的情况下具有可读性和性能。此外,如果您愿意,您可以轻松添加更多权限类型。

如果您的问题是存储在数据库中的正确方法,那么答案将是通过一个名为。创建权限类型表,必要时创建桥接表。如果您有一个表users,您将添加一个表user\u permission\u types,该表将把一个列userID作为外键添加到用户表中,把一个列permissionID作为外键添加到permission\u types表中。这两列合在一起将是user\u permission\u types表的主键


这样做将消除数据库中的所有冗余。

我将始终使用整数作为键。您可以将其存储为。那你就两全其美了@是的,当我使用method2时,我将其存储为enum。但有时当我想添加更多类型/键时,我需要再次修改我的数据库。因此,对于我来说,是否使用method1是一种两难的选择。VARCHAR4占用的字节数与INT相同。VARCHAR5+占用的空间更多。数据类型占用的字节越少,连接性能越好。使用INT作为主键的另一个优点是,如果需要,可以添加更多类型值。如果将其存储为枚举,是否真的会降低性能?如果没有对它进行研究,我会认为MySQL只会为值的索引存储一个整数值。不?把话从我嘴里说出来了。但由于它将它们存储为位集,请注意,它的最大值为32或64,具体取决于平台。所以第一个设置为1,第二个设置为10,第三个设置为100等等。当我想添加枚举键时,我需要再次修改我的数据库。这就是为什么我一直在考虑方法1。Thx指出它存储为16位。不幸的是,这是一个折衷方案!我想您必须权衡一下这种情况发生的频率,以及发生时是否值得执行一行SQL diff。
id | value
1    Owner
2    Agent