我正在尝试考虑在数据库中存储项目数量的最直接方法。我正在创建一个数据库,与我正在开发的网络应用程序一起工作,以监控和记录向人们提供的设备。所以,我已经想到了几种不同的方法,虽然我不确定它们是否容易维持到未来。
创意1
我有一个gear
表,用于存储齿轮类型(例如衬衫,裤子,帽子)以及大小等数据。然后,每次取出齿轮时,都记录在{{1表,存储用户ID,齿轮类型和布尔值等详细信息,以表示它是否已返回并返回日期。然后,为了跟踪数量,我们将为gear_inventory
表中的特定齿轮项目提供total_quantiy和齿轮计数,这是更新手册,当项目被取出或返回到正或负时触发第二个查询给定的数量。
创意2
将上述总数量与gear
相关联,作为该类型所有未退回商品的计数。
创意3
更新任务以在表更新或插入时更改这些数量。然后通过添加或减去给定查询的数量来做同样的事情。
创意1将是最简单但不像其他人那样可靠。理念2是最可靠的数量处理是进入数据库以确保。然后,Idea 3不再可靠,因为它仍然依赖于计划任务来更新它。
那么,您如何实施数量以确保它不会与记录的库存记录不同步?
修改1
更多信息 - 我正在努力实现的核心解决方案是拥有一种存储或计算物品数量的方法,这些方法可以与总物品相关联。如下所述,它将与保龄球馆的借用/借用鞋类似的行为,exect用户将被记录。因此,当项目被借入时将插入记录,并且该记录将在返回时更新返回日期。项目类型将在其自己的表中以存储一般项目的详细信息,并且与已记录的齿轮表具有一对多的关系。问题是,什么是存储/检索项目数量的完全证明/可靠方式。或者我是否过度思考这个问题并且简单的计数查询会产生影响,而不确定在执行oved和重复执行时的计数是多少。
答案 0 :(得分:1)
让我们考虑一下我们要跟踪的内容。
首先剪切可能看起来像这样:
create table items (
id serial,
name text,
...
);
create table inventory (
id serial,
item integer references items(id),
quantity integer check(quantity >= 0)
);
create table loans (
id serial,
user integer references users(id),
item integer references items(id),
quantity integer check(quantity >= 0),
when_loaned timestamp not null default now(),
when_returned timestamp
);
当你借出一些东西时,在贷款中插入一行。当它返回时,设置loan.when_returned。如果loans.when_returned为null,它仍然没有。
您可以在物品借出时减少库存,并在退货时增加库存。为了保持数据完整性,这应该作为触发器来完成,不是作为调度过程。
或者,不更改库存数量。而是从库存中的金额中减去借出项目的数量。这是来自select sum(quantity) from loans where item = ? and when_returned is null
的{{1}}。这使得贷款和退货变得更加简单,并且避免了库存盘点被破坏的可能性,但如果有很多很多未偿还的贷款,它可能会导致性能问题。
如果您借出5件商品并返回3件会怎样?你如何追踪?一个简单的选择是将一笔贷款分成两笔贷款。
select quantity from inventory where item = ?
我不知道你正在使用它的更多内容,用例是什么,以及规模是什么,这就是我所能说的。这是一个很好的起点。