2015-09-11 5 views
0

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

Таблица: dye_tank

dye_id (PK) 
dye_lot 
dye_color 

Таблица: краска

paint_id (PK) 
paint_lot 
paint_color 

Таблица: dye_transfer

dye_transfer_id(PK) 
dye_id (FK) 
paint_id (FK) 
dye_transfer_note 

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

Что делать, если я ТАКЖЕ хотел бы передать много краски в другую партию краски. Например, я мог бы добавить желтую краску в резервуар для краски, чтобы сделать много желтой краски, а затем перекачивать ее в существующую партию синего, чтобы сделать новую партию зеленой краски. Вы рекомендуете отдельную таблицу для лота переводов, таких как:

таблицы: paint_transfer

paint_transfer_id (PK) 
paint_id (FK) 
paint_id (FK) 

или есть лучшее решение. Я мог бы расширить таблицу переноса красителя и сделать его:

Таблица: передача

transfer_id (PK) 
source_id 
source_type 
paint_id (FK) 
transfer_note 

С этим я мог установить тип источника либо быть «краской» или «краситель» и установить SOURCE_ID быть соответствующий PK исходного ингредиента. Одним из недостатков этого я должен был бы использовать более сложные триггеры и не полагаться на встроенные каскады внешних ключей для поддержания ссылочной целостности.

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

Третий вариант заключается в том, чтобы игнорировать тот факт, что произошел переход от танков-цистерн к танку и просто запись создания танков «Зеленый» в качестве передачи всех партий из желтого резервуара и всех партий из зеленого бак.

Может ли кто-нибудь увидеть конкретные преимущества или недостатки для любого решения или использовать что-то другое для аналогичной проблемы?

+1

Зачем использовать такие маленькие имена столбцов. dye_id, paint_id, transfer_id гораздо легче понять и прочитать.нет никакого эффекта на производительность с именами столбцов, которые люди могут понять. – Hogan

+0

Я изменил его –

+0

Я бы порекомендовал две таблицы для двух типов переноса, если вы не ожидаете, что будет много разных типов переводов. С двумя типами двух таблиц лучше. С 4 или более более общей системой было бы лучше. Вы всегда можете просмотреть комбинированные таблицы, если вы чувствуете потребность в данных в этом формате. – Hogan

ответ

0

Еще один способ взглянуть на это - подумать об этом, например, в виде материала. Каждый танк имеет смесь из множества различных материалов. Так что-то вроде этого:

Table: tank 
tank_id (PK) 

Table: material 
material_id (PK) 
material_class (paint, dye, anything else...) 
material_color 

Table: material_lot 
lot_id (PK) 
material_id 

Table tank_contents 
tank_id (PK) 
lot_id (PK) 
transfer_note 

Table tank_contents_history 
date_emptied (PK) 
tank_id (PK) 
lot_id (PK) 
transfer_note 

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

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

+0

Это было бы полезно для «текущего моментального снимка», но если через шесть месяцев мы захотим узнать, какие ингредиенты вошли в лот 150911, не было бы записи. Трассировка лота используется для ситуаций, когда, скажем, поставщик выполнил отзыв большого количества красителей, вы хотели бы знать все партии краски на рынке, которые будут затронуты. В противоположном направлении, если вы заметите проблему качества с большим количеством краски, вы можете вернуться к всем исходным материалам, чтобы попытаться определить, что может быть источником проблемы. –

+0

Простота исправления ... просто перемещайте содержимое резервуара в таблицу архива, а не удаляйте его. –

+0

Добавлен к моему ответу на вопрос, что я имею в виду. –

Смежные вопросы