多值主键对象的良好数据结构是啥?

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 列设置唯一约束。

【讨论】:

很遗憾,在这种情况下我无法更改数据库,但感谢您的建议。我会确保牢记这一点,以便将来我有权更改的任何数据库。

以上是关于多值主键对象的良好数据结构是啥?的主要内容,如果未能解决你的问题,请参考以下文章

提取自增主键的标准做法是啥?

MYSQL表结构管理

第二章MYSQL表结构管理

Access 2013:删除包含多值字段的记录的正确方法是啥?

mysql 笔记3

Grafana mysql 多值变量