我应该将默认值放在哪里?

罗恩·鲁格

我正在开发一个Web应用程序,该应用程序使用PHP作为其代码,并使用MySQL作为其存储引擎。在处理数据模型时,我意识到处理“默认”数据存在一个小问题。

我设计了MySQL模式以包含默认值,这在当时很有意义,因为我主要是“手动”操作数据-一年后,我们开始添加控制面板以允许其他人更改数据。

问题在于如何处理某些对象所需的“默认”值。从技术上讲,将内容保留为“ null”也是一种默认设置,但在此之前并不是我特别关注的一种。

如果使用MySQL默认值,则在插入新值时,我必须立即转过身并查询它,以从数据库中获取“真实”数据。另一方面,如果我在PHP中设置了默认值,则会在两个地方设置默认值,从而违反了DRY。而且,如果有人曾经做过“快速”修复并只在一个地方进行了更改,那么我可能会发现一些非常“有趣”的错误以进行调试。同时,我无法从MySQL中删除默认值,因为它实际上是数据模式的一部分,需要保留在其中。

我敢打赌我要么忽略某件事,要么在某处做出无效假设,但我不知道那是什么。有人对如何处理有任何建议吗?

编辑:

为了清楚起见,我的PHP代码可能类似于以下内容:

$foo = new foo();
//Add in instance-specific data
$foo -> save;

Foo的save方法将运行查询:

INSERT INTO FOO (bar1, bar2)
VALUES (:bar1, :bar2)

但这仅插入Foo使用的(许多)变量中的2个。所有这些操作将我设置为“默认”状态。此刻,我必须运行:

$foo= Foo::getFooWithId($foo->id); //I know I should use a DBA; this is legacy code

然后,将$ foo填充到数据库中已设置的数据中。EG bar3和bar4具有默认值,这些默认值在首次创建对象时未设置-用户可以稍后(如果可能)更改它们,但它们不是“默认”对象的一部分。

我应该将这些默认值移动到PHP中吗?将它们留在MySQL中并退出吗?将它们放在两个地方都违反DRY吗?还是我错过了第四个更好的选择?

桑兹

您没有向我们显示示例查询,但是我会假设有什么问题。

如果您以PHP方式编写插入查询,从而省略了具有默认值的元素,那么MySQL将接管并为您添加它们。

所以,说你有一个列的表 id user comment 假设它 comment 具有默认值。我的意思是,您可以进行插入查询,在其中只需指定 id and user (或 user ,如果 id 仅是主要的自动递增索引,则 可能仅 指定 ),并且the comment 将自动接收您在表中设置的默认值定义。

编辑

无论哪种方式,最适合您的应用程序设计的,实际上……查看它们将在哪里得到最充分的利用,并将其保留在那。

但是我要遵循的一条规则是:不要在多个地方使用默认值,尤其是在它们重叠(而不是扩展)的情况下

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我将存根放在哪里?

来自分类Dev

我应该将Junit @Category的接口类放在哪里?

来自分类Dev

可扩展的SignalR + Azure-将SignalR放在哪里,我应该使用Azure队列吗?

来自分类Dev

我应该将非模型课程放在哪里?

来自分类Dev

我将PDO放在哪里?

来自分类Dev

我应该将域模型放在哪里查看模型映射代码?

来自分类Dev

我应该将Ember-I18n的翻译放在哪里?

来自分类Dev

我将PFObject子类化时在哪里可以设置默认值

来自分类Dev

我应该在哪里将特定于应用程序的指令放在ngBoilerplate上?

来自分类Dev

我应该将全局宏放在哪里?

来自分类Dev

我应该将slf4j的simplelogger的属性文件放在哪里?

来自分类Dev

我应该在哪里将META-INF放在Gradle中?

来自分类Dev

闭环-我应该放在哪里?

来自分类Dev

我应该把NSNotification的removeObserver放在哪里

来自分类Dev

我应该将Ensembles uniqueIdentifier放在哪里?

来自分类Dev

我应该将ASP.NET Core Runtime二进制文件放在哪里?

来自分类Dev

使用redux,我应该将更新状态的逻辑放在哪里?

来自分类Dev

我应该将游戏循环放在哪里?

来自分类Dev

.tolowerCase()我应该放在哪里?

来自分类Dev

我应该在哪里将data属性放在html上?

来自分类Dev

我应该将ssh私钥放在哪里?

来自分类Dev

我应该将Junit @Category的接口类放在哪里?

来自分类Dev

我应该将Meteor.startup中使用的函数的代码放在哪里?

来自分类Dev

我将图像资源放在哪里?

来自分类Dev

我应该在哪里将代码放在ActionBar.TabListener中

来自分类Dev

重击/ Awk。我应该将IF声明放在哪里?

来自分类Dev

我应该将新创建的模块放在哪里(目录)?

来自分类Dev

我应该在哪里将build.groovy文件放在我的grails项目中?

来自分类Dev

我应该把 .Appimages 文件放在哪里?

Related 相关文章

  1. 1

    我将存根放在哪里?

  2. 2

    我应该将Junit @Category的接口类放在哪里?

  3. 3

    可扩展的SignalR + Azure-将SignalR放在哪里,我应该使用Azure队列吗?

  4. 4

    我应该将非模型课程放在哪里?

  5. 5

    我将PDO放在哪里?

  6. 6

    我应该将域模型放在哪里查看模型映射代码?

  7. 7

    我应该将Ember-I18n的翻译放在哪里?

  8. 8

    我将PFObject子类化时在哪里可以设置默认值

  9. 9

    我应该在哪里将特定于应用程序的指令放在ngBoilerplate上?

  10. 10

    我应该将全局宏放在哪里?

  11. 11

    我应该将slf4j的simplelogger的属性文件放在哪里?

  12. 12

    我应该在哪里将META-INF放在Gradle中?

  13. 13

    闭环-我应该放在哪里?

  14. 14

    我应该把NSNotification的removeObserver放在哪里

  15. 15

    我应该将Ensembles uniqueIdentifier放在哪里?

  16. 16

    我应该将ASP.NET Core Runtime二进制文件放在哪里?

  17. 17

    使用redux,我应该将更新状态的逻辑放在哪里?

  18. 18

    我应该将游戏循环放在哪里?

  19. 19

    .tolowerCase()我应该放在哪里?

  20. 20

    我应该在哪里将data属性放在html上?

  21. 21

    我应该将ssh私钥放在哪里?

  22. 22

    我应该将Junit @Category的接口类放在哪里?

  23. 23

    我应该将Meteor.startup中使用的函数的代码放在哪里?

  24. 24

    我将图像资源放在哪里?

  25. 25

    我应该在哪里将代码放在ActionBar.TabListener中

  26. 26

    重击/ Awk。我应该将IF声明放在哪里?

  27. 27

    我应该将新创建的模块放在哪里(目录)?

  28. 28

    我应该在哪里将build.groovy文件放在我的grails项目中?

  29. 29

    我应该把 .Appimages 文件放在哪里?

热门标签

归档