关联没有先前关系的表(SQL Server)

时间:2011-09-13 18:08:01

标签: sql-server tsql stored-procedures relational-database junction-table

编辑:我换掉了结构实现,但我的问题仍然存在;即在创建SvcRequest记录之前首先创建一个Publication对象(如果它还不存在)。

我得到了一个我必须“修复”的数据库,并且对某个特定问题感到非常困惑。为了简单起见,我们有两个已经存在的表(结果)。我花了一段时间才弄清楚两者之间的关系,最终决定在传统的联络表上如下:

                     Publications (id, SvcReqID, LogID)
                             /              \
                            /                \
               SvcRequest (id)              SvcProgressLog (id)

SvcRequest& SvcProgressLog或多或少是兄弟表,都包含对父级的引用。有这种奇怪的等级关系花了我一段时间才弄明白,现在我只需要一种方法来加入它们,这样可以很容易地执行CRUD操作。

此处的流程如下:

  1. 发布服务请求。
  2. 如果出版物存在 - >更新相应的发布记录。如果没有,请创建一个新的出版物。之后,根据从webform中捕获的信息创建SvcRequest记录。(此处需要帮助)
  3. 最后,可以为存在但尚未记录的请求创建日志条目。
  4. 存在以下关系:

    • 出版物 - > SvcRequest :: 1 - >许多
    • 出版物 - > SvcProgressLog :: 1 - >许多
    • SvcRequest - > SvcProgressLog ::很多 - >很多(-ish)

    一如既往,我非常感谢智慧的帮助和话语;) よろしく

2 个答案:

答案 0 :(得分:1)

由于我的数据库结构的复杂性以及我在这里称为SvcRequest表的所有支持表,我选择编写一系列可以单独运行以“更新”的存储过程(尽管实际上是一个插入)请求或由主SP调用以输入新条目。

经过数小时的思考和设计试验,这是我能想到的最佳解决方案。我会在编写之后发布一些示例代码,以便其他人也可以从中受益。 :)

答案 1 :(得分:0)

如果link_id不能用于关联SvcRequest和SvcProgressLog表,那么您需要取消SvcProgressLog与Publication表的关联,并将其直接关联到SvcRequest:

出版物> ----- + SvcRequest + -----< SvcProgressLog