дизайн для «простой» системы инвентаря - PullRequest
1 голос
/ 08 января 2010

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

Во-первых, у нас есть простой инвентарь деталей. Нам не нужно отслеживать отдельные части (во всяком случае, мы не можем), поэтому я хочу смоделировать счет. Моя мысль состоит в том, чтобы иметь разные «корзины» для деталей, которые имеют простой подсчет. Поэтому, если мы переместим видеокарту из корзины «инвентарь» в корзину, я хочу, чтобы «-1» - инвентарь видеокарты, и «+1» - утилизация видеокарты. Контейнеры могут быть более четко определены по мере необходимости, например, pci-видеокарты, agp-видеокарты и т. Д. Или, если мы посчитаем наш инвентарь, нам может потребоваться сделать -3 из инвентаря и +3 до ' усадка.

Смысл в том, чтобы знать в любое время, сколько, скажем, видеокарт у нас есть, сколько палок ОЗУ и т. Д. Два аспекта бункера - какая часть в нем находится (на любом уровне специфики, такой как «старая разная карта» или «32MB-3.3v-agp-video»), и предназначение корзины, например «пожертвование», «инвентарь», «переработка», «магазин» ',' усадка 'и т. д.

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

Так, как я разработал бы стол (ы), чтобы справиться с этим? Я думаю, что это будет что-то вроде книги двойной записи. У меня может быть одна таблица с именем «BinTransactions», где будут from_bin, to_bin и amount. Сумма была бы положительным целым числом, и если я хочу написать запрос, чтобы увидеть, сколько будет вычтено из инвентаря, я бы сделал его отрицательным. Что-то вроде «ВЫБЕРИТЕ СУММУ (количество) * -1 ИЗ BinTransactions ГДЕ from_bin = 'инвентаризация' И time_period = ..."?

Вторая часть этого - сами компьютерные системы. Они поступают как пожертвования в любом состоянии, в котором они находятся. Части могут быть извлечены из них и помещены в инвентарь или переработку; части могут быть извлечены из инвентаря и помещены в компьютеры. Я думаю, я мог бы сделать компьютер

Компьютер наконец-то выходит из нашей системы в качестве гранта, но эта структура имеет один уровень вложенности. Это набор компьютерных частей в компьютере, но есть также монитор, клавиатура, мышь, возможно, динамики. И большой грант может быть несколько систем, в том числе с сетевым оборудованием. Нужно ли «вкладывать» логическую иерархию группировок (части в компьютеры, компьютеры в гранты), или было бы хорошо, если бы каждое пожертвование представляло собой только одну большую группу частей? Если бы это была одна большая группа частей, не обязательно было бы знать, какие части шли с каким компьютером, если бы мы вернули один компьютер из гранта. Также нам хотелось бы узнать из отчетов «34 полных системы были пожертвованы в этом квартале ...»

Ответы [ 2 ]

1 голос
/ 23 марта 2013

Для компьютера это бит набора деталей, способ, которым мы отслеживаем сборки в LedgerSMB, таков:

У нас есть таблица деталей, в которой каждая деталь имеет флаг сборки.

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

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

Похоже, проблема уже решена: http://sourceforge.net/projects/phpmyinventory/ http://sourceforge.net/projects/asset-tracker/ Это всего лишь две ссылки, которые я нашел на sourceforge, введя «инвентарь» в поле поиска.

Самое основное описание таково:

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

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

  • Кто подарил компьютер
  • Кому был предоставлен компьютер

Что касается обработки логики: например, веб-страница, на которой написано: "Woo! Мы получили компьютер! Имеет ли он:

  1. Блок питания?
  2. видеокарта?
  3. Звуковая карта?
  4. И так далее, и так далее. "

То же самое можно сделать, отдавая компьютер - но вам нужно удалить «1» из хранилища для каждой из частей, которые уходят!

Итак, как нам обращаться с инвентарем? Ну, у вас может быть одна таблица, которая будет выглядеть так:

video card   | recycle | donation-in | storage | garbage
sound card   | recycle | donation-in | storage | garbage
power supply | recycle | donation-in | storage | garbage

С каждым бином, сколько есть в данный момент времени. Если вы хотите сделать его более конкретным, вы можете добавить столбец «описание», чтобы вы знали, например, сколько у вас видеокарт каждого типа.

И таблица, которая выглядела так:

part name | from_bin | to_bin | quantity

Большая часть логики перемещения величин, вероятно, должна обрабатываться приложением (я больше похож на Ruby-on-Rails, так что для меня это имеет смысл). Надеюсь, это поможет.

...