【发布时间】:2017-03-11 16:30:06
【问题描述】:
在将数据类型存储到数据库时,最佳实践是什么?
例如,您有一个支持票证功能,其中票证可以具有以下状态:open、closed、review。
你会把它存储为字符串吗?
+----+----------------+--------+
| id | ticket | status |
+----+----------------+--------+
| 1 | example ticket | open |
| 2 | example ticket | closed |
+----+----------------+--------+
将值存储为整数,因此:1 => open、2 => closed 和 3 => review 或作为字符串。
+----+--------+
| id | status |
+----+--------+
| 1 | 1 |
| 2 | 2 |
+----+--------+
如果您将其保存为整数,您是否会创建一个额外的表来解析该状态的名称(比如说support_ticket_states 表)?
+----+----------------+--------+
| id | ticket | status |
+----+----------------+--------+
| 1 | example ticket | 1 |
| 2 | example ticket | 2 |
+----+----------------+--------+
或者你会在客户端这样做吗,例如:
if ($ticket->status == 1) {
echo 'Open';
}
什么是最好的选择?
【问题讨论】:
-
如果它只有 3 个不同的状态,一个 Enum 是合适的。你可以将枚举存储在数据库中吗?
-
您可以将其存储为枚举。似乎确实是最好的选择,您可以将其发布为答案,以便我将其标记为已解决吗?感谢您的快速回复
-
通常情况下,如果可能的状态数量有限,则应该使用 Enum。这样,如果传递了无效值,它可能会在编译时被捕获。除非您创建宏,否则原始整数/字符串不会为您提供这种能力。我会写一个答案,但是我很长时间没有使用PHP或mysql。
-
用于打开和关闭你 1 或 0。
-
@RobertRocha 我们在讨论多个选项,而不仅仅是关闭/打开的布尔值
标签: php mysql database laravel