2012-03-14 1 views
3

В принципе у меня есть небольшая система типа «счетов-фактур», где у меня есть таблица MySQL настроить для отдельных счетов-фактур, линий счетов-фактур, а также предметы, связанную с каждым счетом-фактурой, вроде этого:Является ли отдельный запрос достаточно хорошим, или есть какое-то соединение, которое я могу сделать?

таблицы счетов:

fields: invoice_id | type | fees | comments | company 

-

стол invoice_lines:

fields: id | invoice_id | name | description | quantity 

-

стол invoice_affected_items

fields: id | invoice_id | item_id 

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

Спасибо.

ответ

1

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

Так что ответьте на свой вопрос. Я бы сделал это в отдельных запросах.

+0

Хорошее объяснение. Спасибо! –

0

Если между invoice_lines и invoice_affected_items нет никакой связи, я бы сделал 2 отдельных запроса.

+0

Спасибо за вход! –

2

ИМХО Если затрагиваемые элементы имеют отношения один к одному с накладной линии (через invoice_lines.id = invoice_affected_items.item_id) вы могли бы сделать один из двух вещей

Либо держать вас текущий дизайн и сделать отдельные запросы

или редизайн следующим

  • уронить invoice_affected_items таблицы полностью
  • Добавить invoice_affected_items флаг в invoice_lines т возможность
  • Index invoice_lines по формуле (invoice_affected_items, invoice_id), чтобы знать, что счета-фактуры повлияли элементы
  • Индекс invoice_lines от (invoice_affected_items, ид), чтобы знать, что счет-фактура линии затрагиваемые элементы
Смежные вопросы