多值主键对象的良好数据结构是啥?
Posted
技术标签:
【中文标题】多值主键对象的良好数据结构是啥?【英文标题】:What's a good data structure for a multiple-value primary key object?多值主键对象的良好数据结构是什么? 【发布时间】:2010-01-25 18:36:30 【问题描述】:这个问题最好通过例子来问。假设我有一个名为“Car”的数据库表,其中包含以下列:
(品牌*、型号*、门数*、描述、价格、里程、颜色)
Make、Model 和 NumberOfDoors 的 3 元组构成数据库中的唯一主键。我所做的是为每个订单项创建一个“汽车”类,但如果我想以
的形式收集汽车对象(特定品牌型号和门数、数量、当前销售额),...
其中集合中每个项目的第一个元素是唯一类型的汽车,第二个元素是数量(我有多少这种类型),第三个元素是该品牌模型门的任何当前销售额,我遇到了数据结构困境。
到目前为止,我一直在做的是制作一个适合哈希表的结构,如下所示:
//This will be the unique key for the hashtable
dim uniqueID as String = myCar.make + "@" + myCar.model + "@" + myCar.doorCount
//This is the structure that will hold the perinent info about that unique
//car type
Structure inventory
Dim count as Integer
Dim currentSales as String
End Structure
此时,我将继续从数据库表中填充哈希表,其中哈希表的键是 uniqueID 字符串,值是“库存”结构的实例化。这(在我看来)非常不雅,尤其是哈希表的唯一ID。对于主键由多个值组成的对象,是否有更好的数据结构解决方案?
【问题讨论】:
【参考方案1】:您可以使用实际的类或结构作为主键。
只需覆盖 GetHashCode 和 Equals - 这允许您使用对象本身作为 Dictionary 中的键,并考虑多个值。
【讨论】:
【参考方案2】:一般来说,我不喜欢复合主键。如果可能,请考虑使用数字 PK,例如 CarId,它是一个身份/自动编号。然后对 Make、Model 和 NumberOfDoors 列设置唯一约束。
【讨论】:
很遗憾,在这种情况下我无法更改数据库,但感谢您的建议。我会确保牢记这一点,以便将来我有权更改的任何数据库。以上是关于多值主键对象的良好数据结构是啥?的主要内容,如果未能解决你的问题,请参考以下文章