Какова хорошая структура данных для объекта первичного ключа с несколькими значениями? - PullRequest
1 голос
/ 25 января 2010

Этот вопрос лучше всего задать на примере. Скажем, у меня есть таблица базы данных под названием «Автомобиль» со следующими столбцами:

(Марка *, Модель *, Количество дверей *, Описание, Цена, Пробег, Цвет)

3 кортежа Make, Model и NumberOfDoors составляют уникальный первичный ключ в базе данных. Что я сделал, так это сделал класс «Автомобиль» для каждой позиции, но если я хочу иметь коллекцию объектов автомобилей в виде

{(Конкретная модель марки и количество дверей, количество, текущие продажи), ...}

где первый элемент каждого элемента в коллекции - это уникальный тип автомобиля, второй - количество (сколько у меня этого типа), а третий элемент - любые текущие продажи на этом make-model-doorcount Я столкнулся с дилеммой структуры данных.

То, что я делал до сих пор, - это создание структуры, которая вписывается в хеш-таблицу, как показано ниже:

//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 для хеш-таблицы. Есть ли лучшее решение для структуры данных для объектов, у которых первичный ключ состоит из нескольких значений?

Ответы [ 2 ]

5 голосов
/ 25 января 2010

Вы можете использовать фактический класс или структуру в качестве первичного ключа.

Просто переопределить GetHashCode и равно - это позволяет использовать сам объект в качестве ключа в словаре с учетом нескольких значений.

1 голос
/ 25 января 2010

Вообще говоря, я не фанат составных первичных ключей. Если возможно, рассмотрите возможность использования числового PK, такого как CarId, который является идентификатором / автономным номером. Затем наложите уникальное ограничение на столбцы Make, Model и NumberOfDoors.

...