常量 DB Table 与代码中的常量

DB Table of constants vs constants in code

永恒的问题。

我有一个 table moments_of_day:

id name
1  Morning
2  Afternoon
3  Evening
4  Night

然后是另一个 table,膳食,用 moments_of_day_id 引用它。

然后,在我的 PHP 代码中,我想获取早上的所有餐点。

最好的选择是什么?我是否应该在我的 PHP MomentsOfDay 模型中重复常量来执行类似下一个代码的操作?

const MORNING = 1;

我认为重复常量可能很危险。如果将来 table 发生变化,我也必须将其添加到 MomentsOfDay 模型中。

你怎么看?

在你的情况下枚举类型更合适。 https://dev.mysql.com/doc/refman/5.0/en/enum.html

field_name ENUM('Morning', 'Afternoon', 'Evening', 'Night');

我认为这个问题不一定有确定性的答案,但您应该确定解决方案不只是相信 php 和 mysql 一致.我会在 php 中定义你想要的常量,然后使用一些关于它们的真实数据在 mysql 中查找记录。如果您在 php 中断言 const MORNING = 1;,那么 1 将成为您的数据模型的真实部分,并且应该存储在 mysql 中。您仍然可以在 mysql 中创建 AUTO_INC 值,但这些应该被视为实现工件而不是应用程序数据。我不认为这个问题与模型的其他部分(例如,用户、权限、时间表等)有任何不同。您正在 PHP 中创建数据模型并使用 mysql 使其持久化。您将模型数据发送到 mysql 以保存它,然后使用相同的模型数据来检索它。