Архитектура для этого сценария следующая:
У меня есть таблица предметов и несколько таблиц форм. Вместо того, чтобы формы принадлежали элементам, элементы владеют формами. Это потому, что один элемент может быть в нескольких формах (хотя только один из каждого типа, но не обязательно в любой). Все формы и предметы связаны общим OrderId
. Это можно представить так:
OrderItems | Form A | Form B etc....
---------- |--------- |
ItemId |FormAId |
OrderId |OrderId |
FormAId |SomeField |
FormBId |OtherVar |
FormCId |etc...
Это прекрасно работает для этих форм. Однако есть другая форма (скажем, FormX), которая не может иметь OrderId
, поскольку она состоит из элементов из нескольких заказов. OrderItems
также содержит столбец для FormXId
, но я запутался в том, как лучше всего получить список "FormX", связанных с одним OrderId
. Я использую MySQL и думал, что, возможно, хранимый процесс - лучший способ для этого, но я никогда не использовал хранимый процесс на MySQL и не знаю, как лучше всего это сделать. Другой вариант (kludgy) состоял в том, чтобы дважды ударить по БД, сначала получить все предметы для данного OrderId
, которые также имеют FormXId
, а затем получить все их FormXId
и выполнить динамический SELECT
утверждение, где я делаю что-то вроде (псевдокод)
SELECT whatever FROM sometable WHERE FormXId=x OR FormXId=y....
Очевидно, что это далеко не идеально, но я не могу придумать другого пути ... что-нибудь лучше, что я мог бы сделать программно или архитектурно? Мой внутренний код - ASP.NET.
Большое спасибо!
UPDATE
В ответ на запрос о дополнительной информации:
Пример ввода:
OrderId = 1000
Пример вывода
FormXs:
-----------------
FormXId | FieldA | FieldB | etc
-------------------------------
1003 | value | value | ...
1020 | ... .. ..
1234 | .. . .. . . ...
Вы видите, что проблема в том, что FormX не имеет ни одного OrderId
, а скорее является набором OrderId
s. Иногда несколько элементов из одного заказа находятся в FormX, иногда это только один, большинство заказов не имеют никаких элементов в FormX. Но когда кто-то подтягивает свой заказ, мне нужно, чтобы все FormX, к которым принадлежат его предметы, были показаны, чтобы их можно было изменить / просмотреть.
Я думал о том, чтобы, возможно, создать хранимый процесс, который будет делать то, что я сказал выше, выполнить один запрос, чтобы сбросить все связанные OrderId
с, а затем другой, чтобы вернуть соответствующие FormX. Но должен быть лучший способ ...