2010-02-19 4 views
2

Это не вопрос, связанный с конкретным языком, а скорее с правильной методологией архитектуры обработки инвентаря.Архитектура инвентаря в базе данных

Рассмотрим следующую структуру для хранения программного обеспечения:

platforms (platformID*, platformName) 
titles (titleID*, titleName) 

И следующее столяр стол для уникальных продуктов

products (platformID*, titleID*, releaseDate, notes) 

И Ниже приводится таблица, я хотел бы следить за моим инвентарь

inventory (platformID*, titleID*, quantityAvailable) 

В примерах, которые я видел, другие создали таблица, где каждая уникальная копия программного обеспечения хранится в отдельной строке, как например:

software(softwareID*, softwareTitle) 
inventory(inventoryID*, softwareID*) 

Я хотел бы знать, какой подход является предпочтительным? Должен ли я создать InventoryID и, таким образом, строку для каждого уникального программного обеспечения копии:

inventory(inventoryID*, platformID*(fk), titleID*(fk)) 

Или использовать таблицу, в которой хранится количество вместо этого, как таковой:

inventory(platformID*(fk), titleID*(fk), quantityAvailable) 
+0

Я опустил важную деталь из моего вопроса; то есть, я планирую следить за инвентарем, который выдается взаймы. Я не уверен, как это повлияет на мое планирование. – Mohamad

ответ

1

Я также хотел бы начать с quantityAvailable вместо строк для всех элементов. Но Я бы по-прежнему выбирал инвентарь, потому что делались случаи, когда вам нужно было анализировать записи с помощью той же комбинации комбинаций платформы/названия - с инвентаризацией, если в будущем вы будете более эффективными.

Я бы также рекомендовал добавить следующую колонку: versionNo --- номер версии программного продукта. Иногда у вас могут быть разные версии одного и того же продукта.Когда у вас есть это, не стоит бросать информацию в заголовок (например, вы хотите искать все продукты Microsoft Office независимо от версии ...).

+0

Юрган, спасибо за ответ. Я добавил комментарий выше, что я пропустил важный факт: я хочу отслеживать, где находится элемент инвентаря (если это игра или фильм, например, я хотел бы отслеживать, с каким клиентом он в настоящее время), и я я не уверен, как это повлияет на мое планирование. – Mohamad

+1

Hi Mel, мне кажется, что такая информация относится к объекту инвентаризации. Вот одна из причин: инвентаризация была бы полезной (в качестве первичного ключа, конечно) - поскольку вы можете получить несколько записей инвентаря с разными свойствами. Конечно, вы по-прежнему можете выбрать одну строку для каждого элемента - поскольку, когда ваш инвентарь часто раздроблен, отдельные записи легче обрабатывать в виде суммированных записей, которые вам придется разбивать каждый раз, когда один объект передается клиенту. – Juergen

+1

Другая мысль. Возможно, вы захотите иметь собственный стол для мест (или клиентов), в которые может попасть ваш инвентарь (а не только текстовое поле). – Juergen

1

Должен ли я создать InventoryID и таким образом, строка для каждого уникального программного обеспечения копия?

Нет причин для этого, если вы не хотите хранить некоторую информацию о каждой уникальной копии программного обеспечения, например, о дате, когда была куплена каждая копия. Это редко бывает практичным в инвентаре программного обеспечения.

Или использовать таблицу, которая хранит количество ?

Вы можете также рассмотреть вопрос о добавлении quantityAvailable столбца в таблице продуктов, если вы думаете, что в конце концов вы хотели бы иметь много запасов для каждого заголовка, для того, чтобы иметь возможность выделить количество акций, который находится под специальное предложение, которое скоро истечет и т. д.

+0

Спасибо, Даниэль, я добавил дополнительный комментарий в нижней части вопроса о том, что мое изменение цвета проблемы полностью: отслеживание инвентаря на основе клиента, у которого его нет. – Mohamad

2

Преимущество наличия уникальной строки для каждой части инвентаря заключается в том, что позже, если вы хотите отслеживать такие вещи, как инвентарь, находящийся на перекладке, инвентарь, находящийся на предзаказе, инвентарь, который был продан, но все еще может быть возвращен и т. д.

Я не вижу никакого реального недостатка в этом отношении за исключением того, что это, вероятно, больше работы, которая может не окупиться, если эти вещи действительно не нужны.

+0

Спасибо, Pace. Вы можете заметить, что я непреднамеренно опустил важную деталь, когда задал свой вопрос: я планирую отслеживать инвентарь на основе клиентов, которые его заимствовали. Например, я хотел бы отслеживать, где находится элемент инвентаря/с каким клиентом. – Mohamad