Php 值列表:代码常量还是数据库?
我想知道是否有价值清单管理的良好实践。 例如,我有一个数据库表日志,如下所示: --------------- | logs | |-------------| | id | | idLogType | | message | | date | --------------- 2.只有数据库?Php 值列表:代码常量还是数据库?,php,database,key-value-store,Php,Database,Key Value Store,我想知道是否有价值清单管理的良好实践。 例如,我有一个数据库表日志,如下所示: --------------- | logs | |-------------| | id | | idLogType | | message | | date | --------------- 2.只有数据库? 你觉得这三种方法怎么样?或多或少是非结构化的想法: 您不应该在代码或数据库中使用幻数。因此,应避免使用日志类型“1”、“2”等 您应该在PHP代
你觉得这三种方法怎么样?或多或少是非结构化的想法:
- 您不应该在代码或数据库中使用幻数。因此,应避免使用日志类型“1”、“2”等
- 您应该在PHP代码中使用常量,我将为这些常量提供有意义的字符串值,而不是数值
- 这些字符串值可以直接用作数据库中的
logType
- 因此,对
列使用logType
也非常有意义。如果要添加日志类型,则需要更改表。。。那又怎么样?这并不是经常发生的事情,无论如何,您都需要修改代码来添加一个新的常量,并且您应该准备好模式迁移代码,这使得添加一个新的SQL枚举值变得很简单ENUM
- 常量,如
LogTypeValues::CREATION='CREATION'
类型的列logType
ENUM('creation',…)
- 用于处理日志类型添加的架构迁移
由于我懒散且偏执于bug的蔓延,我通常不使用整数——相反,PHP代码从常量文件向数据库写入表示日志类型的字符串 我最喜欢的解决方案是: 在数据库中存储日志类型:
CREATE TABLE logTypes (
id (SMALLINT, PK)
code VARCHAR(32) UNIQUE
)
在代码中创建常量
class logTypes {
const CREATE_USER = 1;
const EDIT_USER = 2;
...
}
并选择一个同步策略:
- 从DB=>创建logTypes类代码是“DB的缓存”,如果未生成缓存,项目将无法工作
- 从代码创建数据库=>数据库仅用于sql报告和将sql功能应用于日志类型搜索等李>
SELECT * FROM logs JOIN logTypes USING logtype_id WHERE logType LIKE "% CREATION"
我也有过类似的经历。显然,上面提到的所有这些选择都有利弊,我也没有做出决定。这就是我找到这条线的原因 到目前为止,我的首选方法是使用选项1,即仅在应用程序的源代码(PHP/Java等)中存储常量。它的主要优点是减少不必要的DB点击。虽然有些人可能会说它非常小,但DB连接通常是许多web应用程序的瓶颈。另一个优点是它降低了编程的复杂性
除了本线程中提到的内容之外,我所做的唯一一件事就是在应用程序源代码和相关DB表列中的注释中添加注释,以便相互交叉引用。通过这种方式,我尽我所能提醒未来的开发人员,如果发生任何更改,请同步这两个位置 感谢您的回答,但请小心,包含日志的表可能是数据库中最大的表之一,存储varchar(1字节+1字节/char)而不是tinyint(仅1字节)可能是一个问题,因为将字符串存储在数据库中,它甚至不会在我认为绝对不可接受的数据库中。 ------------ | logTypes | ------------ | id | | logType | ------------
class LogTypeValues {
const LOGTYPE_CREATION = 1;
const LOGTYPE_EDITION = 2;
const LOGTYPE_DELETION = 3;
}
CREATE TABLE logTypes (
id (SMALLINT, PK)
code VARCHAR(32) UNIQUE
)
class logTypes {
const CREATE_USER = 1;
const EDIT_USER = 2;
...
}
SELECT * FROM logs JOIN logTypes USING logtype_id WHERE logType LIKE "% CREATION"