这是一个简单的设计问题,我多次想知道,从来没有找到一个令人满意的解决方案.我的例子是php-sql,但这当然也适用于其他语言.
我有一个只包含很少条目的小型数据库表,几乎不需要更新.例如这张usertype桌子:
usertype_id (primary key) | name | description
---------------------------+------------+-------------------
1 | 'admin' | 'Administrator'
2 | 'reguser' | 'Registered user'
3 | 'guest' | 'Guest'
Run Code Online (Sandbox Code Playgroud)
现在在PHP代码中,我经常需要检查或比较我正在处理的用户类型.由于用户类型存储在数据库中,我可以:
1)在类实例化中从usertype表中选择*,并将其存储在数组中.
然后所有id都可用于代码,我可以做一个简单的选择来获取我需要的行.每次实例化类时,此解决方案都需要一个数组和一个db查询.
$query = "SELECT info, foo FROM user WHERE usertype_id = ".$usertypes['admin'];
Run Code Online (Sandbox Code Playgroud)
2)使用name列选择正确的usertype_id,这样我们就可以有效地与其他表连接.这或多或少等同于1)但不需要在php对象中缓存整个usertype表:
$query = "SELECT info, foo FROM user JOIN usertype USING (usertype_id) WHERE usertype.name = 'admin' ";
Run Code Online (Sandbox Code Playgroud)
3)定义与usertype表中的键匹配的常量:
// As defines
define("USERTYPE_ADMIN",1);
define("USERTYPE_REGUSER",2);
//Or as class constants
const USERTYPE_ADMIN = 1;
const USERTYPE_REGUSER = …Run Code Online (Sandbox Code Playgroud)