Подход к базе данных - избыточные данные - PullRequest
1 голос
/ 22 июля 2011

У меня есть 3 таблицы:

products (id, name, price, etc)
orders (id, date, payment_method, etc)
shipments (id, order_id, product_id, address, etc)

Мой вопрос: правильно ли хранить в таблице отгрузки product_id?Я храню его здесь, чтобы найти информацию о поставляемом продукте без использования таблицы заказов.

Ответы [ 3 ]

2 голосов
/ 22 июля 2011

Я бы предложил:

products (product_id, name, price, etc)
orders (order_id, date, payment_method, etc)
orderitem (orderitem_id, order_id, product_id, ...)
shipment (shipment_id, order_id, ... )

пересылка отчасти избыточна - я бы добавил адрес и т. Д. В заказы ...

1 голос
/ 22 июля 2011

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

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

Недостаточно просто исключить дополнительное объединение в запросе ...

1 голос
/ 22 июля 2011

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

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

Также проверьте наличие НОРМАЛЬНЫХ ФОРМ (NF) при создании базы данных, я не уверен, не нарушает ли эта избыточность какую-либо нормальную форму. Но это зависит от вас, решите ли вы сохранить некоторые NF или нет.

...