鉴于以下规则,我应该如何最好地设计表和关系?

Fra*_* R. 6 database-design informix

在典当行业务中,客户典当、出售或购买物品。每当客户典当、出售或购买物品时,就会创建一份指定客户信息、物品以及条款和条件的合同。

每个合同最多允许 6 个项目。如果超过 6 个,则必须将它们拆分为单独的合同。此限制的原因是因为每个打印表格只能存在一个唯一的合同。该表单为 8.5 x 5.5 英寸(半页大小),因此每个表单上只能容纳 6 个项目描述。从法律上讲,我们不能为同一份合同提供第 1 页(共 2 页)。

属于合同的所有项目都分配有批次序列号。这个批号也恰好是合同号。无论是典当、买卖合约,手数都会增加。每种类型的合同都将维护自己的收据序列号。可视化一个单独的典当合同垫,右上角有一个收据编号,一个单独的购买垫和一个单独的销售垫。

买卖是最终的!

但是,客户可以为其活跃的典当支付利息,在这种情况下,客户向收银员提供其原始收据的副本以及利息支付。然后,针对相同的典当物品(即具有相同的批号)发出新的收据,显示新的到期日,而原始或之前的收据被取消并被收银员归档。

当客户赎回他们的典当时,不会发出新的收据。顾客在收据上签字,说当典物品已退还给他们,收据被收银员取消并归档。

当其他客户典当物品或支付利息时,新的收据被写入并提供给客户。

编辑:如果典当行不为每笔利息支付提供新的收据,而只是用支付利息的日期、金额和新的到期日更新原始合同,那么我们就不会出现并发症!但是,我们有一个典当收据编号,有时会增加,有时不会增加,这取决于对每个典当进行的交易类型。

以下是一段时间内典当交易的示例:

    CUSTOMER   TRANSACTION DATE/TIME   TRANSACTION TYPE     RECEIPT#
    --------   ---------------------   ----------------     --------

    Frank      Oct-28-2012,  9:00 am   New Pawn, Lot#501      P12345
    Mark       Oct-28-2012,  9:05 am   New Pawn, Lot#502      P12346
    Jeff       Oct-28-2012,  9:20 am   New Pawn, Lot#503      P12347

    ...
    (several other new pawns, which increment the lot and receipt numbers, and  
     interest payments which only increment the receipt numbers.)

    Mark       Nov-26-2012, 12:30 pm   Pawn Lot#502, Int Pymt P12945
    Frank      Nov-26-2012, 12:32 pm   Pawn Lot#501, Redeemed P12345 (no change)
    Jonathan   Nov-26-2012, 12:35 pm   New Pawn, Lot#600      P12946
    ...

    Jeff       Jan-30-2013, 12:39 pm   Pawn Lot#503, Forfeit  P12347 (no change)
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,在典当的整个生命或死亡期间,典当批号永远不会改变,但随着不同客户对现有典当或典当新物品支付利息,收据编号会增加。如果客户在到期日或之前没有支付任何利息或赎回典当物,则客户没收典当物,(收据编号保持不变),当铺会将这些物品拉入他们的库存。

顺便说一句,当当铺拉出一个成熟的典当时,该典当中的每个物品都会被分配到最新的收据编号,并在每个合同中以物品编号为后缀。然后他们被转移到当铺的库存中。

因此,典当批号 503 中的第二个项目(收货号为 P12347)将转移到指定库存号为“P12347-2”的库存中,其中“P”代表典当,“12347”是当前收货数字和“-2”,因为它是该典当合同中的第二个项目。

我个人不会使用这种编号方案,但是在我的树林中的许多当铺都喜欢这样做,因为他们声称他们可以根据其收据编号判断特定典当最后一次进行任何活动是什么时候,加上他们可以保持他们所有的棋子按时间顺序物理存储,从而更容易拉动它们。

那么,鉴于上述规则和示例,使用 Informix 之类的 SQL DB 或 MS-Access 2010 JetDB,为这些规则设计表和关系的最佳方法是什么?

如果所有典当,买卖都有一个合同表,或者每个人都有单独的合同表,那么最好吗?对合约表进行操作的交易表如何?

Jon*_*ler 5

据我所知,除了 Customer 表之外,您还需要三个表:

  1. 合同 — 保存有关合同的单值数据,不包括收据。它可能会记录合同的最新收据编号,但这将是一种优化,存储可导出的数据。主键:合同号(又名批号)。
  2. Contract Items — 持有合同的 1-6 项。主键:批号、批号。批号是对合同的外键引用。
  3. 收据 — 保存有关收据的信息。主键:收据编号。外键:再次引用合同的合同编号。

给定的收据与一份合同相关联;如果是典当合同,一个单一的合同随着时间的推移可能会有多个收据(买卖合同将有一个收据)。

即使当典当合同被取消时没有发出新的收据,也需要对合同或收据(或两者)进行数据库更新以表明合同已被取消。

有什么我在这里想念的吗?