Полученное поле статуса на столе? - PullRequest
2 голосов
/ 20 октября 2011

Мой клиент - агентство долгосрочной аренды.Таким образом, у нас есть

 Goods 
    pk modelId

 Stock
    pk stockId, fk modelId

 Rentals ( rented stock)
    pk rentalId fk stockId

Кроме того, акции могут принимать другие статусы, такие как ремонт и т. Д., И могут иметь более одного статуса одновременно.

Это облегчит мою жизньполя статуса в таблице запасов, но в конечном итоге это производные данные, которые я могу вывести из других таблиц.Примером может быть нахождение общего количества товаров на складе (не сданных в аренду), включая товары с 0 кол-во на складе.Должен ли я

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

    ps таблицы запасов и товаров разделены, поскольку существует более сложная таксономия, чем я объяснил здесь для типов запасов, т.е. производителей и т. Д.

1 Ответ

1 голос
/ 20 октября 2011

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

Когда вам нужно подумать о другом варианте?Когда вышеуказанный подход становится медленным - даже если вы оптимизировали свои запросы.Если вам нужно рассчитать средние значения, например, для цен акций за 10 лет и для тысяч акций и товаров, запросы не будут достаточно быстрыми, чтобы рассчитываться на лету.

Итак, вы можете сначала добавить таблицы или поля с агрегированными или другими производными данными, которые вам нужны.Вы можете использовать индексированные представления (большинство СУБД имеют эту функцию) или дополнительные таблицы для агрегированных данных - это может хорошо работать для данных, которые больше не могут изменяться, например, статистические данные для цен на акции за предыдущие дни / месяцы / годы.Когда день / месяц / год заканчивается, вычисления выполняются (один раз) и таблицы обновляются.Затем вы можете быстро найти эти таблицы для более старых данных и «активные» таблицы для более новых данных.

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

...