2015-09-07 4 views
0

enter image description hereОпределить слишком много избыточности?

Я делаю курс онлайн, и это дает следующий relvar пример, а затем говорит:

Хм. Хотя ответ и андеркод различны в каждом наборе кортежей каждый кортеж технически уникален - значения атрибутов id, questionID и answertype точно такие же. Нормализация в порядке.

Вопрос в том, что считается слишком избыточным? Где вычерчена линия, прежде чем мы начнем идти по этапу нормализации?

+0

https://en.wikipedia.org/wiki/Database_normalization – Bulat

ответ

3

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

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

В вашем примере, если предположить, что questionID -> answertype, (questionID, answercode) -> answer, и что id эквивалентно questionID и им можно пренебречь, то отношение только в 1NF так answertype не является главным атрибутом в зависимости от части ключа (questionID, answercode) , Если обновление должно было изменить значение некоторых из отображаемых типов ответов (но не всех), ваши данные были бы логически повреждены. Нормализация могла бы предотвратить это.

Ваши клиенты заботятся о точности и согласованности. Вы?

+0

поэтому, когда мы начнем нормализацию? «ясно описано в другом месте» мало помогает. Мы будем повторять ценности почти в каждом рельефе. Итак, когда мы видим избыточную зависимость, содержащую те же значения, это когда мы должны нормализоваться? –

+0

Забудьте о повторяющихся значениях. Посмотрите на функциональные и многозначные зависимости. Сравните это с обычными формами. Есть ли риск аномалии обновления? Вы хотите обеспечить целостность по дизайну или будете ли вы выполнять эту ответственность самостоятельно в клиентском коде и при выполнении ручных обновлений? Либо нормализовать, либо принять последствия, это ваш выбор. – reaanb