跟踪具有历史记录的库存的系统 table

System that keeps track of inventory with a history table

我有一个允许会员租用设备的系统,该系统应该有每件租用物品的历史记录以及由谁租用。系统还应该跟踪谁有什么设备 rented/checked 并且还应该按类型、状态、名称等对设备进行分类。最后它还应该发送关于设备过期的通知电子邮件。

我正在尝试了解这些关系以及我应该如何对此建模。截至目前,我目前的 table 和想法是这样的:

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 table 和 EquipmentItem table 之间的租赁历史是多对多关系吗?

2) EquipmentItem table 状态和类型之间是否存在一对多关系,我的看法是 EquipmentItems 可以有多种状态或类型,但每种状态或每种类型只能属于一种装备物品.

3) 在 EquipmentItem 中有一个数量字段是否有意义,我曾经在杂货店工作,所以我将逻辑基于条形码,其中相同的产品通常具有相同的条形码,例如(奇多泡芙薯片)所有奇多泡芙薯片都有相同的条形码,但上面有数量值。或者无论是否相同,让每个项目都独一无二会更好吗product/model?

我的逻辑是:

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

我只是想要一些帮助更好地理解它们之间的关系,如果我正确地建模了我的 table,如果没有,如果有人能指出我改进的正确方向,那就太好了这个。

回答您的问题

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

    多对多更像是,"a Member has access to 0...n EquipmentItems, and each EquipmentItem can be accessed by 0...n Members"。


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

    一个氧气罐和一对脚蹼都可以归类为'Scuba Gear',状态为'Checked Out'。

    您可以有多个 'Scuba Gear' 标签,并将每个唯一的 'Scuba Gear' 标签分配给它自己的 EquipmentItem,但是您只需为每个新的 EquipmentItem,而不是重复使用现有的。


  1. 这真的取决于您是否想准确识别会员租用的是哪件设备(也许某些东西损坏了您可以找到租用该特定设备的每个人?)。如果您确实进行了区分,那么每个项目都将只是它自己的行。您还应该添加一个新列作为外部标识符,但不需要保留计数。

    如果你都一样,那我只保留total,不保留available。如果您保留 available 列,那么每当有内容登录 EquipmentRentalHistory 时,您将不得不不断更新它。如果表不同步,这会很烦人。您可以只查询 EquipmentRentalHistory 以获得 Id 的设备,并在 returnedDate IS NULL 的条目中计算当前正在使用的设备数量


补充说明

在租赁历史记录中有一个 'due date' 列可能会更好,而不是硬编码日期计算,以防您想要更改到期日期。这样你也可以授予延期。