此场景的架构如下:
我有一个项目表和几个表格。与其让表单拥有项目,不如让项目拥有表单。这是因为一个项目可以在多个表单上(虽然每种类型只有一个,但不一定在任何表单上)。表格和项目都由一个共同的OrderId
. 这可以这样表示:
OrderItems | Form A | Form B etc....
---------- |--------- |
ItemId |FormAId |
OrderId |OrderId |
FormAId |SomeField |
FormBId |OtherVar |
FormCId |etc...
这适用于这些表格。但是,还有另一种表单(例如 FormX)不能有 an,OrderId
因为它由来自多个订单的项目组成。OrderItems
确实也包含一列FormXId
,但我对获取与单个OrderId
. 我正在使用 MySQL,并认为存储过程可能是最好的方法,但我从未在 MySQL 上使用过存储过程,也不知道最好的方法。我的另一个(kludgy)选项是两次访问数据库,首先获取给定的所有项目,这些项目也OrderId
有一个FormXId
FormXId
SELECT
SELECT whatever FROM sometable WHERE FormXId=x OR FormXId=y....
显然这不太理想,但我真的想不出任何其他方式......我可以通过编程或架构做任何更好的事情吗?我的后端代码是 ASP.NET。
非常感谢!
更新
响应更多信息的请求:
样本输入:
OrderId = 1000
样本输出
FormXs:
-----------------
FormXId | FieldA | FieldB | etc
-------------------------------
1003 | value | value | ...
1020 | ... .. ..
1234 | .. . .. . . ...
您会看到问题在于 FormX 没有一个OrderId
,而是一个OrderId
s 的集合。有时来自同一个订单的多个项目在 FormX 上,有时它只是一个,大多数订单在 FormX 上没有任何项目。但是当有人提出他们的订单时,我需要显示他们的项目所属的所有 FormX,以便可以修改/查看它们。
我正在考虑创建一个存储过程来执行我上面所说的操作,运行一个查询以拉下所有相关OrderId
的 s,然后另一个以返回适当的 FormX。但必须有更好的方法......