使用序列生成的ID或备用方式查询DB

使用序列生成的ID或备用方式查询DB

问题描述:

我们目前在DB中维护一组模板。在应用程序中,我们在用户界面中提供了一个下拉列表,允许用户选择他们想用来创建基于该模板的字母的模板。因此,我们正在显示模板的描述,选择时我们将templateID传递给数据库以检索模板。使用序列生成的ID或备用方式查询DB

现在,我们有了一个新的要求,即从没有UI的模板生成一个字母来选择模板的类型。我的意思是,应用程序中由用户执行的调用生成字母本身的特定点用于识别要使用的特定模板。所以,我的问题是我通过什么来查询数据库以返回存储的模板。我知道我需要使用templateID。我的问题是这个templateID是每次将模板添加到系统时由序列生成的。因此,只有在将此模板添加到系统后,才能知道templateID,然后在调用动作来生成该字母时使用该模板ID。所以,这意味着将模板记录添加到系统后会发生更改。这将涉及代码更改,或者如果不是配置文件中的更改,以将应用程序所需的序列生成的ID映射到模板。

所以,我的问题是我应该在调用字母生成的同时传递另一个标识符,然后通过配置文件将该标识符映射到数据库中生成的一个序​​列,并在每次添加新模板时更新此配置文件系统。有没有更好的方法来解决这个问题。

+0

我决定继续如下。在应用程序ID之前决定在应用程序的特定点中使用哪个applicationID,并将该applicationID本身作为templateID添加到DB中的表中,而不是每次都使用序列生成templateID。因此,applicationID将是唯一的,并且每次将模板添加到系统时都会添加。因为,已经决定可以直接在应用程序中使用,而不需要任何配置文件进行映射。这似乎是要走的路吗? – javauser 2012-04-03 04:52:25

这听起来像你说你的系统

  • 店模板,也可以
  • 让用户在运行时创建模板。

而且您在运行时创建模板时无法推导出模板ID号。您似乎知道现有模板的ID号。 (我可能是错的。)

任何允许使用序列生成器插入行的dbms,无论调用哪个生成器,都会提供一种方法让您找到它提供给您的最后一个id号。 PostgreSQL是一个常见的开源dbms;它提供了几个这样的功能。一个是nextval(),它将序列递增并返回新值。它在多用户环境中安全;它总是会返回您的新值,而不是其他人的。

你需要检查你的DBMS文档,找出哪些功能提供,以及他们的特点和局限性。

+0

是的。系统可以选择添加新模板,并允许用户从这些模板创建字母。显示用户对模板的描述,并在选择后传递给数据库以检索模板。现在,它是一个不同的场景。在应用程序中有一个页面,通过该页面必须从特定模板创建一个字母。所以,不需要显示选择模板的选项,而是直接传递templateid。一旦模板被添加到系统中,就会生成templateid。一次可以添加多个模板。这是我的问题。 – javauser 2012-04-11 17:13:20