2010-09-18 7 views
1

Я знаю много способов избежать дублирования PHP-кода (в моем случае PHP). Тем не менее, я разрабатываю довольно большое приложение, которое выполняет некоторые вычисления в базе данных с данными, которые он находит, и я заметил необходимость использовать тот же код (части SQL) в других местах.Избегайте дублирования кода SQL?

Мне не нравится идея копировать и вставлять одно и то же снова и снова. Каков хороший способ сделать это? Должен ли я использовать хранимые процедуры? Я мог почти вычислить некоторые вещи на PHP, за исключением того, что в большинстве случаев запросы вычисляют значения на основе данных, не возвращенных запросом, и кажется глупым возвращать дополнительные данные в PHP, чтобы он мог его вычислять. Иногда это может быть хорошо, но теперь это не так.

Что мне делать?

Например, во всем во многих запросах SQL Я вычисление похож на это:

... 
(SELECT SUM(amount) FROM IT INNER JOIN Invoice I WHERE IT.invoiceId=I.id) AS total 
... 
FROM InvoiceTransaction IT 
... 

Обратите внимание, что я теперь дома, так что я пишу это с верхней частью моей головы.

+0

Какая база данных? Я предполагаю, что это MySQL, но вы никогда не знаете ... –

+0

О, да, это MySQL. – Tower

+0

очень трудно ответить без фактического примера. –

ответ

2

Я думаю, что у вас есть 2 решения:

  1. если SQL возвращает небольшое количество данных, я бы просто обернуть SQL вызова в вызове метода и назовите его (параметризация при необходимости)
  2. если SQL обрабатывает большое количество данных, я бы сохранил эти данные в базе данных и использовал хранимую процедуру. Затем вы можете вызвать эту хранимую процедуру без дублирования кода (но оберните сохраненный вызов proc в функцию и вызовите его, то есть как в варианте 1)

Я не обязательно буду уклоняться от хранимых процедур. Но я бы посоветовал оставить из них бизнес-логику (сохранить ее в самом приложении) и убедиться, что у вас есть достаточное количество модулей.

1

Я не предпочитаю хранить процедуру, особенно не для рефакторинга. Вам следует подумать о том, чтобы написать функцию, которая возвращает нужную запись, и поместить ваши SQL-запросы в эту функцию, чтобы вы могли ее вызывать, вместо того чтобы помещать ваш SQL везде.

1

Я думаю, нам понадобится пример запроса. Сохраненные procs могут быть хорошим вариантом. Или альтернативой может быть использование представлений. Одно преимущество в том, что ваши запросы в представлениях или хранимых процедурах - это то, что вы часто можете использовать базу данных, чтобы увидеть, где используются ваши таблицы. Недостатком является то, что вы блокируете себя в одной базе данных, однако, вероятно, вы все равно это делаете.

Смежные вопросы