SQL插入AJAX表单

时间:2010-06-29 19:49:15

标签: sql ajax

在一个有多对多关系的数据库中(例如3个这样的表格)

Book    |   Author    |    BookAuthor
_____   |   ______    |    __________
BookId  |   AuthorId  |    BookId
Title   |   Name      |    AuthorId
...     |   ...       |

我想要一个表单来创建一本新书。在该表格中,用户将输入关于书籍的信息(标题等),并且他们将通过相同的表格选择书籍的作者。

在这样的情况下,你什么时候在Book表中插入?你是这样做的:

  1. 您访问该表单,以便获得BookId,并且可以在用户添加作者时插入BookAuthor表中吗?

  2. 仅在用户离开表单时进行(您在Book中插入然后在BookAuthor中插入)?

  3. 使用1时,您可能会收到大量不需要的记录,因为即使用户离开页面或点击取消也会创建记录。

    使用2,你没有BookId,所以你不能开始插入BookAuthor表,直到整个表格被填满(那时你不能真正使用AJAX)。

    这似乎是一种相当普遍的情况,所以我想有一种正确的方法可以做到这一点?

    编辑:可以添加作者,就像标题被添加到Stack Overflow(自动完成框)中的问题一样,就像在答案中建议的那样。您添加了一个标记,但无法立即插入,因为该数据库中尚不存在该问题。因此,当您提交问题时,我猜测自动完成框的内容将被解析,并且同时插入两个(标记和问题)。我不知道它是如何在SO(解析或其他)上完成的,但这基本上就是我想要找到的。

2 个答案:

答案 0 :(得分:1)

我绝对不会建议#1,因为你说的原因,并且只是没有逻辑意义。

我建议#2,或#2的演变。

首先,我想知道为什么你想要/需要用AJAX做这件事 - 与你的最终陈述相反,它当然是可能的 - 但你的简化例子也可以用简单的HTML表格提交。

无论如何,这取决于作者的创作方式。您是否希望允许用户同时创建作者条目,或者除此之外? (我假设后者)。

如果我正在做这个项目,我可能想让用户创建图书条目并从自动完成作者框中选择。我还想让他们从那个盒子里创建任何新的作者条目。例如,如果他们输入的作者姓名不在作者表中,系统将创建一个新条目。

如果作者条目尚不存在,您需要创建一个新条目,这将为您提供新的作者ID。

获得作者ID后(通过查找现有ID或创建新ID),您可以创建图书条目。完成后,您将获得图书ID,此时您可以在BookAuthor中添加参考。

您可能希望将此全部包装在事务中,然后在创建BookAuthor条目后提交。

您可能希望为ID使用自动增量列,并且在链接到BookAuthor表时,您可能希望对ID列使用外键约束。

除此之外,您可以使用AJAX进行任何客户端到服务器的通信 - 这只是从浏览器与服务器通信的一种方式。

答案 1 :(得分:0)

您的AJAX调用将点击插入Book表格中的页面然后插入您的BookAuthor表格。这两个查询都将在事务中完成,以维护主/外键关系的完整性。

根据您的数据库,Book表中的BookID可以通过多种方式获得。您可以在Book表插入后查询它。

  

从Book

中选择Max(BookID)作为DRAWID

或者,如果您使用的是Oracle,则可以先插入序列,然后再插入Book表。

  

从双

中选择BookID_SEQ.nextval

然后,您可以在Book表插入中使用此序列号以及BookAuthor插入。

所有这些查询都必须在一个交易中被调用,所以一些鬼鬼祟祟的玩家不会潜入你身后窃取你的Max(BookID)或增加你的序列。