нахождение минимального покрытия заданного набора функциональных зависимостей

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

Это функциональные зависимости:

client      --> office

stock       --> exchange, dividend

broker      --> profile

company     --> stock

client      --> risk_profile, analyst 

analyst     --> broker

stock, broker   --> investment, volume

stock       --> company

investment  --> commission, return

stock, broker   --> client

account     --> assets

person user3647474    schedule 17.05.2014    source источник


Ответы (1)


Преобразуйте все FD так, чтобы RHS любого FD состояла только из одного атрибута.

client      --> office
stock       --> exchange
stock       --> dividend
broker      --> profile
company     --> stock
client      --> risk_profile
client      -->analyst
analyst     --> broker
stock, broker   --> investment
stock, broker   --> volume
stock       --> company
investment  --> return
investment  --> commission
stock, broker   --> client
account     --> assets

Следующим шагом нам нужно найти избыточные атрибуты в LHS.

Выберите FD, которые имеют 2 или более 2 атрибутов на LHS

1.stock, broker   --> investment

Удаляйте один атрибут за раз из LHS и вычисляйте замыкатель оставшихся атрибутов, если замыкатель атрибутов включает исключенный атрибут, то вы можете фактически удалить атрибут.

Удалить биржевую форму 1 и вычислить клоузер для брокера

(broker)+ = {broker,profile,investment,return ,commission}

который не содержит акции, поэтому вы не можете удалить акции

Удалить брокерскую форму 1 и вычислить клоузер для акций

(stock)+ = {stock,exchange,dividend,investment,return,commission,company}

который не содержит брокера, поэтому вы не можете удалить брокера

вы можете играть в ту же игру для следующих FD

2.stock, broker   --> volume
3.stock, broker   --> client

Для FD 3. вы обнаружите, что брокер может быть удален, что приведет к следующим FD

client      --> office
stock       --> exchange
stock       --> dividend
broker      --> profile
company     --> stock
client      --> risk_profile
client      -->analyst
analyst     --> broker
stock, broker   --> investment
stock, broker   --> volume
stock       --> company
investment  --> return
investment  --> commission
stock       --> client
account     --> assets

Последний шаг — поиск избыточных FD. Чтобы проверить FD формы X ---> Y является избыточным, вычислите clouser X и проверьте, содержит ли он Y. Если это так, то вы можете безопасно удалить FD из минимального набора покрытий. Это показано ниже.

 client      --> office

вычислить близость клиента

(client)+ = { client , risk_proflie,analyst,broker,profile }

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

client      --> office
stock       --> exchange
stock       --> dividend
broker      --> profile
company     --> stock
client      --> risk_profile
client      -->analyst
analyst     --> broker
stock, broker   --> investment
stock, broker   --> volume
stock       --> company
investment  --> return
investment  --> commission
stock       --> client
account     --> assets
person akashchandrakar    schedule 04.11.2014