2

我正在创建一个包含三列名称的小型数据库:ID、名称、状态

“状态”可以是以下三项之一:等待、已批准、其他

我的问题是,将“状态”存储在数据库中的最佳/最正确方法是什么?它应该存储为 varchar 字符串还是 1、2 或 3 整数,然后在从数据库读取时将其转换为等待/批准/其他?我希望这是有道理的,感谢您的帮助。

4

7 回答 7

5

tinyint您应该有一个使用数据类型来引用该状态的状态表(称为字典或查找表) 。您将使用外键约束。这样您就可以保持关系和域的完整性。它将允许您在不更改表结构的情况下添加/更改/删除状态值。

地位
==============
标识值
1 等待
2 批准
3 其他
用户
=====================
id 名称 status_id
1 鲍比 3
于 2012-09-17T17:55:39.337 回答
1

创建另一个名为

具有 2 个字段 id INT Primary Auto Increment name varchar(30) 的状态。

通过整数在用户表中添加您的状态并使用 JOIN 引用它们。

您还可以将 users 表中的状态更改为 status_id,这样会更有意义。

IMO这是最合适的方式

于 2012-09-17T17:58:20.487 回答
0

整数更小。您的应用程序可以将整数翻译成多种语言等。

整数好。

查看ENUM。如果没有,请确保您使用的是正确大小的 integer

于 2012-09-17T17:55:24.123 回答
0

一般来说,将这些项目存储为文本,除非:

  • 您将搜索它们:字符搜索比数字(整数)搜索花费的时间更长且成本更高
  • 您将需要对它们进行“数学运算”(求和、平均值、标准偏差等):转换/转换为数字,执行计算,然后对结果进行处理非常耗时)
于 2012-09-17T17:55:35.983 回答
0

使用带有单独查找表的数字。

于 2012-09-17T17:55:47.337 回答
0

整数字段比 varchar 字段使用更少的内存空间,因此将“状态”选项存储为数字将略微减少内存使用量。

我建议将“状态”存储在一个整数中,并在必要时将其转换为外部的相应值。

于 2012-09-17T17:56:16.533 回答
0

我认为它们应该按原样存储:枚举

例子:

status ENUM('waiting', 'approved', 'other') DEFAULT 'other'
于 2012-09-17T17:56:47.683 回答