使用历史记录表跟踪库存的系统

时间:2019-04-11 22:20:38

标签: sql-server database data-modeling

我有一个系统,该系统使成员可以租用设备,并且该系统应具有每个租借项目以及谁租用的历史记录。该系统还应跟踪谁租用/检出了哪些设备,并应按类型,状态,名称等对设备进行分类。最后,它还应发送过期设备的通知电子邮件。

我正在尝试理解这些关系以及如何建模。到目前为止,我当前的表格和想法是这样的:

Member Table:
Id (PK)
MemberId
FirstName
LastName
Email

EquipmentItem Table:
Id (PK)
EquipmentName
EquipmentType (FK)
EquipmentStatus (FK)
TotalQuantity
RemainingQuantity

EquipmentStatus Table:
Id (PK)
StatusName

EquipmentType Table:
Id (PK)
TypeName

EquipmentRentalHistory Table:
Id (PK)
MemberId (FK)
EquipmentId (FK)
CheckOutDate
ReturnedDate

1)我想知道这些之间的关系,租赁历史会成为Member表和EquipmentItem表之间的多对多关系吗?

2)EquipmentItem表在状态和类型之间是否具有一对多的关系,我认为这是EquipmentItems可以具有许多状态或类型,但是每种状态或每种类型只能属于一个EquipmentItem。

3)在我以前在杂货店工作的EquipmentItem中有一个数量字段是否有意义,所以我将逻辑基于条形码,而相同的产品通常具有相同的条形码,例如(Cheetos Puff芯片)所有Cheetos Puff芯片都具有相同的条形码,但上面带有数量值。还是让每个商品都具有唯一性,而不管它是同一产品/型号,还是更好?

我的逻辑是:

  1. 会员出租物品
  2. 系统将其记录到历史记录表中
  3. 然后系统检查到目前为止已检出多少个相同项目,如果说我们该项目的总数为4,而3个成员已经检出
  4. 我们将剩余数量字段更新为差异,因此在这种情况下为1
  5. 系统然后可以通过返回所有返回日期为null的记录来跟踪谁签出了什么
  6. 然后系统将检查所有返回日期为null的记录,然后在签出日期进行日期范围确定设备是否过期
  7. 向第6步中与所述记录相关联的成员电子邮件发送通知

我希望有一些帮助可以更好地理解它们之间的关系,如果我正确地建立了表的模型,那么如果有人可以指出正确的改进方向,那就太好了。

1 个答案:

答案 0 :(得分:0)

回答您的问题

  1. 关于ERD中的建模,我不认为这符合多对多关系,但是EquipmentRentalHistory是它自己的实体,具有多对多关系与MemberEquipmentItem的关系。

    多对多更像是,“一个Member可以访问0 ... n EquipmentItems,而每个EquipmentItem可以被0访问... n Members”。


  1. 我不同意它们是一对多的关系。

    氧气罐和一对脚蹼都可以归为“潜水装备”,并且状态为“已签出”。

    您可以有多个“ Scuba Gear”标签,并将每个唯一的“ Scuba Gear”标签分配给它自己的EquipmentItem,但是随后您将为每个新的EquipmentItem创建新标签,而不是重用现有的。


  1. 这实际上取决于您是否要确切确定成员所租用的设备(也许有些东西损坏了,您可以追踪每个租用该设备的人吗?)。如果您要区分,那么每个项目都将是其自己的行。您还应该添加一个新列作为外部标识符,但是无需保持总计。

    如果您的情况都一样,那么我只会保留total,而不保留available。如果保留了available列,那么无论何时在EquipmentRentalHistory中登录某些内容,您都将不得不不断对其进行更新。如果表不同步,这将很烦人。您可以只查询EquipmentRentalHistory的设备Id,然后对returnedDate IS NULL的条目进行计数,以获取当前正在使用的设备数量


附加说明

在租赁历史记录中最好有一个“到期日”列,而不是对日期计算进行硬编码,以防您要更改到期日。这样,您还可以授予扩展名。