gpt4 book ai didi

php - 如何在 Web 应用程序中存储选项列表

转载 作者:搜寻专家 更新时间:2023-10-30 21:55:37 25 4
gpt4 key购买 nike

我们目前正在设计一个新的数据库,我不确定要如何存储我的选项列表。

例如,如果您有一个优先级列表:

1  High
2 Medium
3 Low

或输入:

1 email
2 phone
3 text

我应该如何存储这些?

过去,我将它们放在数据库表中(选项 1):

优先级

id description
1 High
2 Medium
3 Low

这样做的结果是,它们成为其他表中的外键。

另一种方法(选项 2)是将它们作为常量列表存储在代码中。

优缺点

选项1

  • 更易于维护,无需推送代码。您只需添加维护页面即可编辑表格。
  • 更多的数据库命中,每次你想检索列表。

选项 2

  • 较少点击数据库。
  • 如果列表需要修改,需要修改代码,然后推送代码。

我错过了什么吗?什么是常见的做法?

干杯

最佳答案

我会根据以下因素做出决定:

<强>1。可用值的数量:

如果它只是一组 2 或 3 个预定义值,如优先级 HighMediumLow.. 我更愿意拥有它在代码库中作为常量。因为极不可能添加任何新选项,例如 very lowvery very low

如果这些值是预定义的但数量很大,比如员工的技能组合......我肯定会把它放在数据库表中。

2。值改变的可能性:

如果这些值经常变化,并且您希望通过管理面板将控制权交给用户来管理这些值,那么一定要将这些值存储在数据库表中。

<强>3。使用频率:

如果这些值是您系统的核心,几乎所有查询都使用它来过滤结果,那么您还需要考虑性能:

例如:假设整个项目取决于HighMediumLow 优先级。您需要使用优先级过滤几乎每个查询:

拥有常量的 priority 存储在 tasks 表中:

$tasks = Task::whereIn('priority', [high_constant, low_constant])->get();

有一个单独的表 priorities 并且与使用 priority_id 外键的 tasks 有关系:

$task = Task::whereHas('priority', function($q){
return $q->whereIn('priority_name', ['high', 'low']);
})->get();

根据您拥有的数据数量和您进行的频繁查询,您可以检查哪些因素影响了性能。如果差异非常小,我更喜欢处理第 1 点和第 2 点的常量。

<强>4。获取 ID 等额外内容:

假设您有一个用于创建新任务的页面,其中有一个优先级下拉列表。

如果你有一个单独的表,你将必须从 priorities 表中获取该优先级的 ID,以便在将任务保存在 tasks 中时将其保存为外键 table 。 (虽然真的不是什么大不了的事,但值得一提)

如果你有常量,你可以直接保存那个值。

每一个都有优点和缺点,我会主要根据上面的第 1 点和第 2 点做出选择。

另外,如果你正在制作常量,我建议制作一个 laravel facade使用 n 别名,然后在其中定义常量。所以你可以在整个项目中使用它

Priority::HIGHPriority::LOW

关于php - 如何在 Web 应用程序中存储选项列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54803471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com