2

我有一张禁止原因表:

id | short_name | description
 1      virus     Virus detected in file
 2      spam      Spammy file
 3      illegal   Illegal content

当我禁止一个文件是病毒时,在我的代码中我这样做:

$file -> banVirus();

它将文件 id 和禁止原因插入到表中:

"INSERT INTO 'banned_files' VALUES (61234, 1)"

我的问题是;我硬编码值 1 是否有问题?, 表示垃圾邮件文件。

我应该在我的配置中使用定义,比如定义('SPAM',1),所以我可以用定义替换 1 吗?还是根本不重要?

4

2 回答 2

2

如果id是一个自增字段,那么这是一个非常大的问题!由于id是自动生成的,稳定性很难保证;即他们可能会改变。

如果这id是您手动分配的东西,那不是什么大问题,但这是不好的做法。因为幻数很容易导致混乱和错误。谁知道1在阅读您的代码时“”是什么意思?

因此,无论哪种方式,您最好为每个案例分配一个稳定、可读的id。

我同意@Tenner 的观点,从一开始就为这些静态、不变的数据创建一个表也几乎没有意义。您的banned_files表应该有这样的列:

reason ENUM('virus', 'spam', 'illegal') NOT NULL

您的数据库中不需要任何其他内容。当为用户输出这个时,你可以通过你的 PHP 代码用一个简单的数组添加一个可读的原因。

于 2013-10-11T15:08:10.357 回答
1

由于您有固定(且很少)数量的参数,我很想在您的代码中将 ID 设为枚举,甚至根本不将它们作为单独的数据库表包含在内。

想想像性别这样的东西——它有两个(或更多)选项,都是固定的。(我们不会很快添加多个新性别。)我保证大多数注册系统都没有包含两个条目的 GENDER 表。

所以,表banned_files会是这样的:

id      | reason
--------+------------
12345   | 1
67890   | 2

并且您的代码将根据需要包含枚举:

enum BanReason {
    Virus = 1,
    Spam = 2,
    Illegal = 3
}

(请转换为 PHP;我是 C# 开发人员!)

在 PHP 中:

$aBanReason = array(
    'Virus' => 1,
    'Spam' => 2,
    'Illegal' => 3
);
于 2013-10-11T15:06:52.607 回答