Разложение BCNF (дизайн базы данных)

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

**make(id, name, est, founder, city, state)**

id->name;
name->est, city, state, founder;
city->state

New Relations: [Key(id),name], [Key(name),est,city,state,founder], [Key(city),state]

**model(id, makeId, name, year, category)**

id->makeId, name;
name->year, category (not superkey, but can't really decompose)

**features(id, modelId, abs, tpms, sidebags, drl)**

id->modelID, abs, tpms, sidebags, drl 

**user(id, name, pass, first, last, phone, isAdmin)**

id->name, pass, isAdmin; name->first, last, phone

**selling(id, price, modelId, mileage, userId)**

id->price, modelId, mileage, userID

person Leif    schedule 31.07.2011    source источник


Ответы (1)


BCNF прост: просто убедитесь, что все зависимости между наборами атрибутов в одном отношении являются зависимостями от суперключа отношения. Ваш первый близок, но во втором отношении необходимо опустить «состояние». Часто люди останавливаются на 3NF, поскольку не все отношения с FD имеют разложения BCNF, сохраняющие зависимости. Вам нужна помощь в разложении других отношений? Я помогу, если тебе это нужно.

Редактировать: Помощь по другим отношениям.

Продажи и характеристики в порядке. Модели и пользователи должны быть разделены по имени, чтобы быть в BCNF; вы указываете, что это не то, что вы можете сделать для моделей. Почему? Название подразумевает материал справа от стрелки, верно?

person Patrick87    schedule 31.07.2011
comment
Да, если бы вы могли помочь мне разложить остальные, я был бы очень признателен. Я все еще учусь применять алгоритм, поэтому посмотреть, как это сделать в таких случаях, было бы большим подспорьем. - person Leif; 01.08.2011
comment
LHS должен быть суперключом, верно? Если бы я разбил его так: [Ключ (идентификатор), makeId, имя] [Ключ (имя), год, категория] было бы правильно? Спасибо за помощь. - person Leif; 01.08.2011
comment
Держите имя в первом, да. Зависимость внутри любого данного отношения должна быть от суперключа этого отношения; этот суперключ не обязательно должен быть суперключом оригинала. Декомпозиция, которую вы предлагаете в комментарии выше, является правильной декомпозицией BCNF без потерь, сохраняющей зависимости. - person Patrick87; 01.08.2011
comment
Хорошо, спасибо! Я предполагаю, что таблица пользователей разбита следующим образом: R1: [Ключ (идентификатор), имя, пароль, isAdmin] R2: [Ключ (имя), первый, последний, телефон] Будут ли эти новые отношения удовлетворять BNCF, как новая модель связи? Можно ли рассматривать продажи/функции уже в BCNF? - person Leif; 01.08.2011