2011-12-01 70 views
1

目前我正在为一个客户端的网站工作,他在软件插件中进行交易。客户端需要能够上传产品,并为这些产品提供不同的版本,更新和修补程序。例如:veProduct v1.1.4是Product veProduct的版本1,更新1和补丁4。客户需要能够购买到版本的许可证。许可证是每个用户生成的文件,需要可供下载。目前我正在为网站设计数据库,而我偶然发现了一个问题。我应该如何处理不同的补丁&版本?处理版本

我目前的设计:

在这个设计中,我创建一个表产品,它包含了产品本身的信息,如名称和描述。该产品可能有多个版本,需要不同的许可证,所以我创建了另一个名为版本的表。在这张表中将会有一个下载链接,一个更新日志和这个版本的产品的定价。对于拥有较旧版本许可证的客户而言,这也是一个折扣价格,但这并不重要。在此之后,我创建了用户表,以便我可以链接用户和许可证表中的版本。在此表中,您还可以找到许可证文件的下载链接。

之后,我的麻烦开始了。我创建了更新表,例如v2.3。这意味着它的version_id是2,它的update_id是3.然后我创建了表格Patch,例如v2.3.1,其中version_id是2,update_id是3,patch_id是1.直到现在没有问题,但是有一个这个设计有很大的缺陷。那时候我想上传一个没有更新版本的补丁,比如V1.0.1。这意味着我必须在表更新中创建一条记录,其中up​​date_id为0并且没有下载链接或更改日志。我不想创建一个没有任何目的的记录,而是要成为补丁的“父母”。

[删除]

固定我的问题:

我很难想到了解决办法,所以我问你的帮助。

摆脱版本和更新表中的下载链接字段并依赖修补程序表中的下载链接字段是个好主意吗?通过这种方式,我总是可以做出另一个补丁,即使我只上传新版本,或者我上传了一个全新的产品。拥有更新表仅仅是为了成为补丁父母而感觉不对。

那么,谁能帮我找出这一个呢?我应该如何在我的数据库中存储新产品,版本,更新和补丁。我应该在哪里存储我的下载链接?最后但并非最不重要的是,我怎样才能让我的版本与客户保持联系,以及如何保持许可证的下载链接? (所以每个用户得到他自己的许可证每个版本的产品,而不是每个产品,更新或补丁)

诚恳,

水肺凯

PS:真的很讨厌不能够,如果张贴图片你是一个新用户,'因为我想发布我的MySQL工作台的屏幕截图,而不是大量的代码。

回答

1

而是更新和修补程序,为什么不只是有一个释放台看起来像这样:

release_id, 
version_id, --foreign key 
type, -- this is either UPDATE or PATCH 
release_name, -- this is the full ver number 1.0.1, for instances 
changelog, 
download_link 

这将让你保持版本,您可以与顾客建立关联,对许可的目的,但会让你对您首先创建的内容(更新或修补程序)进行灵活处理,而无需插入虚拟行。

顺便说一句:在这个模型中,我会从版本中删除下载链接,所以它只存在于版本级别(本质上是版本1.0.0)。

+0

似乎是一个好主意,但是有一个问题。如果外键仅链接到version_id,则不可能同时具有Product1 v1.0.0和Product2 v1.0.0。也许我可以通过在Version表中添加version_nr来解决此问题,然后向产品添加外键?所以Id与version_nr无关。 –

+0

您在每个产品的版本中都有一个单独的行,因此外键可能没有问题(因为产品1版本1和产品2版本1各自具有不同的版本ID)。 – Chris

+0

http://twitter.com/#!/ScubaKay/status/142308141760118784/photo/1/large。那么如果我不能上传文件,也许这样做。你的意思是这样吗? –