小编Vin*_*ent的帖子

数据库设计:将sql数据库密钥与php常量匹配?

这是一个简单的设计问题,我多次想知道,从来没有找到一个令人满意的解决方案.我的例子是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)

php database-design design-patterns

9
推荐指数
1
解决办法
1273
查看次数

标签 统计

database-design ×1

design-patterns ×1

php ×1