2013-11-14 1 views
2

Ну, я только что слышал об этом сегодня, но я этого не понимаю. Поэтому у меня не должно быть таблицы транзакций с столбцом Date (потому что больше транзакций может произойти в тот же день), но у меня должен быть столбец Transaction и Date, где Date будет иметь FK для транзакции. Тогда в чем смысл, вместо даты повторю FK.Я не получаю нормализации БД - не повторяется ли повторение FK?

пример: брокер может совершить сделку в любой день. (транзакция тогда должна содержать информацию брокера и даты).

+2

Совершенно очевидно, что 2 разных дизайна, которые вы сравниваете. Добавить детали, структуры таблиц, столбцы, FK и т. Д. –

+1

@ypercube: 's/это ясно/не понятно /'? –

+0

@BillKarwin Извините, я имел в виду ** совершенно неясно **. Но теперь я не могу редактировать. –

ответ

1

Отъезд:

http://en.wikipedia.org/wiki/Database_normalization#Normal_forms

Дата совершения сделки не должны быть нормализованы.

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

+0

согласно нашему учителю в uni, это должно быть как Date может повторяться. – user970696

+0

Если в зависимости от даты есть другая информация о транзакции, она может быть нормализована. Существуют ли другие данные транзакции, которые зависят от даты? –

+0

Существует три таблицы: брокер, транзакция и дата. Транзакция должна содержать идентификатор брокера и дату (FK?). – user970696

0

Использование даты - не идеальный пример. Подумайте, а не записи клиентов, привязанные к каждой транзакции. Вы хотите сохранить FK клиента в каждой строке транзакции. Вы не хотите повторно хранить имя, адрес, пароль клиента!

1

Предполагая, что ваша дата таблицы как таблицы периода в нашем хранилище данных, это, вероятно, структурирована что-то вроде этого:

Field date, datatype date (not datetime) primary key 
other fields include fiscal year and holiday information 

Тогда ваша таблица транзакций может выглядеть примерно так:

broker_id, foreign key to broker 
date, foreign key to date 
transaction time 
other fields as necessary 

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

+0

, но этот внешний ключ для брокера на самом деле является столбцом, правильно? Извините, я новичок в этом. – user970696

1

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

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

+0

Скалярные атрибуты с повторяющимися значениями абсолютно * являются * кандидатами на нормализацию и обычно * должны * всегда нормализоваться. Это не значит, что их нужно разлагать на новые отношения. Я думаю, это то, что вы имели в виду, но это не то, что вы сказали. * Нормализация * - не просто синоним * декомпозиции *. – sqlvogel

1

Перемещение атрибута даты в другую таблицу и включение его внешнего ключа в таблицу транзакций не имеет ничего общего с «нормализацией». Рассмотрим пример отношения:

T{TransactionId,Date} 

и зависимость

{TransactionId}->{Date}

Если TransactionID является ключевым, то T уже satisifies шестых нормальная форма. Перенос даты в другую таблицу, заменяя ее другим атрибутом и/или делая его внешним ключом, не сделает T «более нормализованным», чем он есть.

Независимо от того, являются ли значения атрибута «repeat» нерелевантными при нормализации. Какая разница между функциональными зависимостями и зависимостями соединений, которые вы хотите удовлетворить в своей схеме базы данных.«Повторяющиеся данные» - это фраза, иногда используемая неофициально, чтобы описать, что такое функциональные зависимости, но это просто упрощение, чтобы сказать, что декомпозиция требуется просто потому, что данные повторяются.

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