我正在维护一个允许用户上传Web服务描述的Web应用程序。存储这些描述的服务表大致如下所示:
CREATE TABLE service(
id integer primary key,
name varchar(255)
targetNamespace varchar(255),
);
现在我们要让用户上传他的网络服务的多个版本。问题是如何在数据库中反映这一点。
到目前为止,这是我的想法:
有一个服务表,但只存储服务ID
CREATE TABLE service(
id integer primary key,
);
有一个service_version表,用于存储特定于版本的信息,并使用FK引用服务表:
CREATE TABLE service_version(
id integer primary key,
service_id integer references service(id),
name varchar(255),
target_namespace varchar(255)
);
这应该使我能够查询与服务相关的所有版本。这是一个理智的方法吗?有更好的解决方案吗?
答案 0 :(得分:2)
我建议您需要除了ID之外的SERVICE表中的属性,以便能够以有效的方式唯一地标识单个Web服务。例如,名称不会保持不变,因此是SERVICE的属性而不是SERVICE_HISTORY吗?
只有版本之间可能发生变化的元素应该在版本表中,你看。
答案 1 :(得分:1)
通过David Aldridge在correct answer展开一点......
您的问题描述并不十分清楚。是说每个Web服务都是通过名称标识的,随着时间的推移,每个Web服务都会开发出新版本,每个版本都会获得一个新的ID号和一个可能不同的命名空间?
如果是这样的话,这与出版的书籍的情况完全相同,其中名称保持不变,而新版本可能会在每个版本获得新编号和可能不同的字幕的情况下发布。
这种情况将是一个简单的父子关系。为Web服务(书籍)定义一个表,并为版本(版本)定义相关的子表。
图表
您可能希望应用程序编程和/或数据库服务器的约束强制执行一个业务规则:每个父级(Web服务)必须至少有一个子级,永远不会为零。每个父母的第一个孩子代表初始版本。