database:存储索引或键值

时间:2013-09-17 02:01:11

标签: php mysql database

我正在使用PHP,MySql。

示例:

$type = array(
    "owner",
    "agent",
    "representative",
);

在DB中存储的首选方法是什么?

  1. 将其存储为索引,0表示“所有者”,1表示“代理”,...
  2. 使用键值存储它。使用

    重新创建上面的代码
    $type = array(
        "OWNER" => "owner",
        "AGENT" => "agent",
        "REPRESENTATIVE" => "representative",
    ); 
    

    然后将值存储为“OWNER”,“AGENT”。

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

    方法1

  4. - 低可读性
  5. +良好表现
  6. 方法2(ENUM)

  7. +高可读性
  8. - 低绩效
  9. - 添加改变数据库设计的关键需要
  10. 最佳做法是什么?你们用的是什么?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

我更喜欢方法1.性能方面,它比方法2更好。如果您关注可读性,我会创建一个名为permission_types的表:

id | value
1    Owner
2    Agent

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

答案 2 :(得分:2)

如果您的问题是存储在数据库中的正确方法,那么答案将是通过名为normalization的过程的索引值。创建一个permission_types表,如果需要,还可以创建一个桥表。如果你有一个表users,你可以添加一个表user_permission_types,它将userID列作为user表的外键,以及一列permissionID }作为permission_types表的外键。这两个列一起将成为user_permission_types表的主键。

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