我想知道是否有人可以提出合适的设计模式来实现以下目标:
我有工资单,每张单显示我以前的工资和我目前的工资。每个工资单应该不需要复制字段,而是将current
值指向下一个单据中的previous
值。
除此之外,我还需要能够在任何时间点检索任何给定的工资单(最好是O(1))。
这是一个有助于理解我的问题的视觉效果。
[key:"1"] [key:"2"] [key:"3"]
+------+ +------+ +------+
| | | | | |
| Curr | <--- | Prev | | Curr |
| Null | | Curr | <--- | Prev |
| | | | | |
+------+ +------+ +------+
非常感谢任何帮助
答案 0 :(得分:2)
为您的PaySlip
课程提供一个PreviousPaySlipKey
属性,对于第一个工资单,该属性将为null。在您的数据库中,这应该是PaySlip
Key
属性的外键。
这样,如果您有PaySlip
,您可以找到上一个工资单的密钥,并使用该密钥查询数据库中的工资单。
答案 1 :(得分:1)
免责声明:我不是VB程序员,以下语法可能不适用。假设VB具有Map
接口,您可以将其用于查找O(1)
Map<Integer, CompositeValue> = some hash based map
并声明一个类(假设VB允许你创建类)CompositeValue
如下:
class CompositeValue {
Integer previousKey;
Value value;
}
现在,一旦您从CompositeValue
检索到Map
,您就有办法获得它的真实价值(value
),并检索使用previousKey
的前一个值。
只是一个想法。
答案 2 :(得分:0)
如果我们在这里讨论数据库,那么应该为每个工资单提供一个顺序ID(在某些RDBMS中也称为自动增量)。这将是主键(因此它会自动编入索引)。假设您检索了所需的工资单,以下是如何从DB中获取前一个工资单:
SELECT TOP 1 * FROM PaySlip WHERE PaySlipID < @PaySlipID ORDER BY PaySlipID Desc
下一个:
SELECT TOP 1 * FROM PaySlip WHERE PaySlipID > @PaySlipID ORDER BY PaySlipID
您可能拥有存储在单个表中的多个员工的工资单,因此只需添加到WHERE条件中。
在每个工资单上存储对上一个/下一个工资单的引用是有效的。