Я хотел бы создать таблицу, которая поможет отслеживать содержимое резервуара с течением времени. Танк обычно заполняется сразу, и к нему будет применено много имени, и оно будет опустошено. Если это единственный сценарий, я бы сделал это.Лучший дизайн стола для отслеживания партии
Таблица: 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 исходного ингредиента. Одним из недостатков этого я должен был бы использовать более сложные триггеры и не полагаться на встроенные каскады внешних ключей для поддержания ссылочной целостности.
Первое решение кажется более простым, но второе похоже, что это обеспечит большую гибкость в будущем.
Третий вариант заключается в том, чтобы игнорировать тот факт, что произошел переход от танков-цистерн к танку и просто запись создания танков «Зеленый» в качестве передачи всех партий из желтого резервуара и всех партий из зеленого бак.
Может ли кто-нибудь увидеть конкретные преимущества или недостатки для любого решения или использовать что-то другое для аналогичной проблемы?
Зачем использовать такие маленькие имена столбцов. dye_id, paint_id, transfer_id гораздо легче понять и прочитать.нет никакого эффекта на производительность с именами столбцов, которые люди могут понять. – Hogan
Я изменил его –
Я бы порекомендовал две таблицы для двух типов переноса, если вы не ожидаете, что будет много разных типов переводов. С двумя типами двух таблиц лучше. С 4 или более более общей системой было бы лучше. Вы всегда можете просмотреть комбинированные таблицы, если вы чувствуете потребность в данных в этом формате. – Hogan