触发还是多次查询?性能效率?

时间:2011-07-11 03:39:06

标签: php mysql database database-design

我正在使用php和mysql设计一个Web应用程序。我对数据库有点怀疑。 该应用程序就像

  1. 用户自行注册。
  2. 用户输入工作量(登录后:) :)。
  3. 用户退出。
  4. 现在我在同一表单上接受多种类型的输入。假设有3种类型的输入,它们存储在7个不同的表中(客户要求:()

    现在我的问题是在输入完成后触发查询的最佳方法是什么? 现在我可以想到以下几种方式。

    1. 从php
    2. 中解决7个不同的查询
    3. 编写一个触发器以在适当的表中传播输入?
    4. 请指导我哪种方法有效率?  谢谢:))

4 个答案:

答案 0 :(得分:2)

通常你想远离触发器,因为如果你需要加载大量数据,你将会受到惩罚。存储过程是要走的路。您可以设置不同的条件,以便在需要时将输入传播到不同的表中。

答案 1 :(得分:1)

我认为你需要重新考虑你的情况。你已经知道有更少的表来处理它会有多棒吗?那么,为什么不用正确构造的视图来模拟这种情况。然后,客户端(你确定它是客户端吗?有时ops说“客户端”,当他们的意思是“报告我们需要稍后提供的”时)可以拥有数据库可以处理的表。顺便说一句,你仍然可以解雇inserts and updates on a view

因为您的数据库似乎与PHP数据结构没有明确的关系,所以我的直觉是将两者分开,而不是更少。这意味着实际上有利于存储过程和触发器(假设上面的代码不可行),这可能更难调试,但这也意味着PHP只需要考虑

  

“我正在插入此事物,名为< thing name>”

而不是

  “OMG,所以这就像,首先我必须和<表1>交谈,但我不能忘记<表2>,特别是因为那两个可能......等等,我做了轮到我了?“

好的,PHP不是ditz(我实际上喜欢这种语言),但它实际上存储时也应该尽可能 dumb 事情 - 那不是它的事。

答案 2 :(得分:0)

您可能希望编写一个运行七个查询的存储过程。仔细考虑运行这七个查询所需的事务数量。

答案 3 :(得分:0)

您认为必须更改哪些查询才能运行?

您是否可以访问数据库服务器?

你知道哪种情况会触发你的触发器吗?

是否有其他进程/应用程序将数据写入数据库?

如果您的查询经常更改,我会在PHP中使用代码来运行查询。

如果您无法访问数据库服务器,实际上您可能需要使用该方法!您需要具有编写存储过程和触发器的权限。

如果其他进程正在写入同一个数据库,您必须与相应的进程所有者讨论您的要求!否则,数据库中可能会显示/更改数据,这是不需要的。

我个人倾向于远离触发器,除非他们调用非常简单的存储过程并且我100%确定没有其他人会被触发器打扰!