我正在使用php和mysql设计一个Web应用程序。我对数据库有点怀疑。 该应用程序就像
现在我在同一表单上接受多种类型的输入。假设有3种类型的输入,它们存储在7个不同的表中(客户要求:()
现在我的问题是在输入完成后触发查询的最佳方法是什么? 现在我可以想到以下几种方式。
请指导我哪种方法有效率? 谢谢:))
答案 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%确定没有其他人会被触发器打扰!