SQL DB结构-订单草稿和将订单ID作为标识符的考虑

时间:2018-07-10 13:19:40

标签: sql database data-structures database-design

我正在为自己大约10年前开发的客户升级系统。

这是一个标准的销售/库存/会计系统(如果可以的话)。

他们向我询问的其他内容之一是创建订单草稿的能力。随着公司的发展,订单的大小也随之增加。他们希望能够开始为客户输入订单,并可以选择保存并稍后再返回。

我最初的想法是要有一个包含草稿的订单表和一个表示状态(草稿/已张贴)的字段。这样可以防止在Orders表和DraftOrders表之间重复数据。

这对我来说似乎是正确的,但是当然,OrderId字段(自动递增int)将不再是Order的可靠标识符(因为可能缺少订单之间的许多数字)。

理想情况下,客户希望将OrderId保留为标识符,是否有任何解决方案可以启用此功能,而不是创建草稿订单表?

在此先感谢您的帮助。

亲切的问候

1 个答案:

答案 0 :(得分:0)

如果您要确保标识符在税收方面没有空白,则不能一开始就使用PK。这是因为序列也可能有间隙。例如,如果INSERT由于违反某些约束而失败,那么您将丢失保留的序列号。

如果您不想创建单独的表,建议您添加一个新列来存储税单ID。对于草稿,它将保持为NULL,并将在下订单时以编程方式填充。在用户界面上,您将显示此新列,并可能允许对其进行一些搜索(提示:索引的理想候选者),但是在内部,您仍将使用与以前相同的FK(用于订单和草稿)。