Стол не может иметь разные характеристики. type_table, material_table> code_table.
Шкаф не может иметь разные характеристики. type_shkaf -> code_shkaf.
Исходные функциональные зависимости представлены на рисунке 2.1
Рисунок 2.1 – Исходные функциональные зависимости
2.3.2 Функциональные зависимости сохраняющие иерархию
В данном множестве есть следующие зависимости, которые сохраняют иерархию:
Спортивным залом не может быть несуществующее помещение. num_zal -> num_p.
Не поступавшая партия объектов не может быть зарегистрирована как инвентарь. code_inv -> code_obj.
Не поступавшая партия объектов не может быть зарегистрирована как техника. code_tec -> code_obj.
Не поступавшая партия объектов не может быть зарегистрирована как мебель. code_meb -> code_obj.
Незарегистрированная единица инвентаря не может быть списана. inv_number_INV_out -> inv_number_INV.
Незарегистрированная единица техники не может быть списана.
inv_number_TEC _out -> inv_number_TEC.
Незарегистрированная единица мебели не может быть списана. inv_number_MEB_out -> inv_number_MEB.
Незарегистрированная партия инвентаря инвентаря не может быть партией мячей.
code_balls -> code_inv.
Одна и та же партия ворот не может поступить дважды.
code_gate -> code_inv.
Одна и та же партия тренажеров не может поступить дважды.
code_trenager -> type.
Одна и та же партия телевизоров не может поступить дважды.
code_TV -> diagonal, screen.
Одна и та же партия холодильников не может поступить дважды.
code_refreg -> height_ref, widht_ref, depht_ref, sum_sq_polok, com_volume, user_volume.
Функциональные зависимости сохраняющие иерархию представлены на рисунке 2.2.
Рисунок 2.2 - Функциональные зависимости, сохраняющие иерархию
Исходное множество функциональных зависимостей представлено на рисунке 2.3.
sp, np -> Fam, Im, Otch, pol, dateborn, datevidachi, kemvidan, country, city, street, numstreet, numflat, dolgnost |
Fam, Im, Otch, dateborn, country, city, street, numstreet, numflat -> sp, np |
sp_pl, np_pl -> date, rost, ves, staff, number, status |
date, staff, number, status -> sp_pl, np_pl |
sp, np -> num_room |
num_p -> square, naznachenie |
num_room -> room |
num_zal -> type_zal |
num_zal -> num_p |
code_obj -> kol, date, balance |
code_inv -> firm_inv, model_inv |
code_inv -> code_obj |
code_tec -> firm_tec, model_tec |
code_tec -> code_obj |
code_meb -> firm_meb, dlina, width, height, color |
code_meb -> code_obj |
inv_number_INV -> code_inv |
inv_number_TEC -> code_tec |
inv_number_MEB -> code_meb |
inv_number_INV_out -> inv_number_INV |
inv_number_TEC_out -> inv_number_TEC |
inv_number_MEB_out -> inv_number_MEB |
inv_number_INV_out -> date_out_inv |
inv_number_TEC_out -> date_out_tec |
inv_number_MEB_out -> date_out_meb |
inv_number_INV, date_IinZal -> num_zal |
inv_number_TEC, date_TecInP -> num_р |
inv_number_MEB, date_MebInP -> num_р |
code_balls -> material |
code_balls -> code_inv |
code_gate -> height_gate, shirina, kind |
code_gate -> code_inv |
code_trenager -> type |
code_trenager -> code_inv |
code_TV -> diagonal, screen |
code_TV -> code_tec |
code_refreg -> height_ref, widht_ref, depht_ref, sum_sq_polok, com_volume, user_volume |
code_refreg -> code_tec |
code_vacuum -> moshnost_v |
code_vacuum -> code_tec |
code_bed -> type_bed |
code_bed -> code_meb |
code_table -> type_table, material_table |
code_table -> code_meb |
code_shkaf -> type_shkaf |
code_shkaf -> code_meb |
Рисунок 2.3 - Исходное множество функционаьных зависимостей
В ходе построения неизбыточнго покрытия множество функциональных зависимостей не изменилось.
В ходе построения леворедуцированного покрытия множество функциональных зависимостей не изменилось.
В ходе построения праворедуцированного покрытия множество функциональных зависимостей не изменилось.
Этапы построения классов эквивалентности представлены на рисунке 2.8.
1. Ef( sp, np ): |
sp, np -> Fam, Im, Otch, pol, dateborn, datevidachi, kemvidan, country, city, street, numstreet, numflat, dolgnost |
Fam, Im, Otch, dateborn, country, city, street, numstreet, numflat -> sp, np |
sp, np -> num_room |
2. Ef( sp_pl, np_pl ): |
sp_pl, np_pl -> date, rost, ves, staff, number, status |
date, staff, number, status -> sp_pl, np_pl |
3. Ef( num_p ): |
num_p -> square, naznachenie |
4. Ef( num_room ): |
num_room -> room |
5. Ef( num_zal ): |
num_zal -> type_zal |
num_zal -> num_p |
6. Ef( code_obj ): |
code_obj -> kol, date, balance |
7. Ef( code_inv ): |
code_inv -> firm_inv, model_inv; code_inv -> code_obj |
8. Ef( code_tec ): |
code_tec -> firm_tec, model_tec; code_tec -> code_obj |
9. Ef( code_meb ): |
code_meb -> firm_meb, dlina, width, height, color; code_meb -> code_obj |
10. Ef( inv_number_INV ): |
inv_number_INV -> code_inv |
11. Ef( inv_number_TEC ): |
15. Ef( inv_number_MEB_out ): |
inv_number_MEB_out -> inv_number_MEB |
inv_number_MEB_out -> date_out_meb |
16. Ef( inv_number_INV, date_IinZal ): |
inv_number_INV, date_IinZal -> num_zal |
17. Ef( inv_number_TEC, date_TecInP ): |
inv_number_TEC, date_TecInP -> num_р |
18. Ef( inv_number_MEB, date_MebInP ): |
inv_number_MEB, date_MebInP -> num_р |
19. Ef( code_balls ): |
code_balls -> material |
code_balls -> code_inv |
20. Ef( code_gate ): |
code_gate -> height_gate, shirina, kind |
code_gate -> code_inv |
21. Ef( code_trenager ): |
code_trenager -> type |
code_trenager -> code_inv |
22. Ef( code_TV ): |
code_TV -> diagonal, screen |
code_TV -> code_tec |
23. Ef( code_refreg ): |
code_refreg -> height_ref, widht_ref, depht_ref, sum_sq_polok, com_volume, user_volume |
code_refreg -> code_tec |
24. Ef( code_vacuum ): |
code_vacuum -> moshnost_v |
code_vacuum -> code_tec |
25. Ef( code_bed ): |
code_bed -> type_bed |
code_bed -> code_meb |
26. Ef( code_table ): |
code_table -> type_table, material_table |
code_table -> code_meb |
27. Ef( code_shkaf ): |
code_shkaf -> type_shkaf |
code_shkaf -> code_meb |
Рисунок 2.4 - Этапы построения классов эквивалентности
Этапы построения минимального покрытия на основе прямой функциональной определяемости представлены на рисунке 2.5.
2. Проверка: f \ Ef(sp, np) |= sp, np -> sp, np? |
Да => заменяем sp, np -> Fam, Im, Otch, pol, dateborn, datevidachi, |
kemvidan, country, city, street, numstreet, numflat, dolgnost и sp, np -> |
num_room на sp, np -> Fam, Im, Otch, pol, dateborn, datevidachi, |
kemvidan, country, city, street, numstreet, numflat, dolgnost, num_room. |
5. Проверка: f \ Ef(num_zal) |= num_zal -> num_zal? |
Да => заменяем num_zal -> type_zal и num_zal -> num_p на num_zal -> |
type_zal, num_p. |
6. Проверка: f \ Ef(code_inv) |= code_inv -> code_inv? |
Да => заменяем code_inv -> firm_inv, model_inv и code_inv -> code_obj |
на code_inv -> firm_inv, model_inv, code_obj. |
7. Проверка: f \ Ef(code_tec) |= code_tec -> code_tec? |
Да => заменяем code_tec -> firm_tec, model_tec и code_tec -> |
code_obj на code_tec -> firm_tec, model_tec, code_obj. |
8. Проверка: f \ Ef(code_meb) |= code_meb -> code_meb? |
Да => заменяем code_meb -> firm_meb, dlina, width, height, color и |
code_meb -> code_obj на code_meb -> firm_meb, dlina, width, height, |
color, code_obj. |
9. Проверка: f \ Ef(inv_number_INV_out) |= inv_number_INV_out -> |
inv_number_INV_out? |
Да => заменяемinv_number_INV_out -> inv_number_INV и |
inv_number_INV_out -> date_out_inv на inv_number_INV_out -> |
inv_number_INV, date_out_inv. |
10. Проверка: f \ Ef(inv_number_TEC_out) |= inv_number_TEC_out -> |
inv_number_TEC_out? |
Да => заменяем inv_number_TEC_out -> inv_number_TEC и |
inv_number_TEC_out -> date_out_tec на inv_number_TEC_out -> |
inv_number_TEC, date_out_tec. |
11. Проверка: f \ Ef(inv_number_MEB_out) |= inv_number_MEB_out -> |
inv_number_MEB_out? |
Да => заменяем inv_number_MEB_out -> inv_number_MEB и |
inv_number_MEB_out -> date_out_meb на inv_number_MEB_out -> |
inv_number_MEB, date_out_meb. |
12. Проверка: f \ Ef(code_balls) |= code_balls -> code_balls? |
Да => заменяем code_balls -> material и code_balls -> code_inv на |
code_balls -> material, code_inv. |
13. Проверка: f \ Ef(code_gate) |= code_gate -> code_gate? |
Да => заменяем code_gate -> height_gate, shirina, kind и code_gate -> |
code_inv на code_gate -> height_gate, shirina, kind, code_inv. |
Рисунок 2.5 - Этапы построения минимального покрытия на основе прямой функциональной определяемости
Редуцированное минимальное покрытие представлено на рисунке 2.6
Fam, Im, Otch, dateborn, country, city, street, numstreet, numflat |
> sp, np |
sp_pl, np_pl |
> date, rost, ves, staff, number, status |
date, staff, number, status |
> sp_pl, np_pl |
num_p |
> square, naznachenie |
num_room |
> room |
code_obj |
> kol, date, balance |
inv_number_INV |
> code_inv |
inv_number_TEC |
> code_tec |
inv_number_MEB |
> code_meb |
inv_number_INV, date_IinZal |
> num_zal |
inv_number_TEC, date_TecInP |
> num_р |
inv_number_MEB, date_MebInP |
> num_р |
sp, np |
> Fam, Im, Otch, pol, dateborn, datevidachi, kemvidan, country, city, street, numstreet, numflat, dolgnost, num_room |
num_zal |
> type_zal, num_p |
code_inv |
> firm_inv, model_inv, code_obj |
code_tec |
> firm_tec, model_tec, code_obj |
code_meb |
> firm_meb, dlina, width, height, color, code_obj |
inv_number_INV_out |
> inv_number_INV, date_out_inv |
inv_number_TEC_out |
> inv_number_TEC, date_out_tec |
inv_number_MEB_out |
> inv_number_MEB, date_out_meb |
code_balls |
> material, code_inv |
code_gate |
> height_gate, shirina, kind, code_inv |
code_trenager |
> type, code_inv |
code_TV |
> diagonal, screen, code_tec |
code_refreg |
> height_ref, widht_ref, depht_ref, sum_sq_polok, com_volume, user_volume, code_tec |
code_vacuum |
> moshnost_v, code_tec |
code_bed |
> type_bed, code_meb |
code_table |
> type_table, material_table, code_meb |
code_shkaf |
> type_shkaf, code_meb |
Рисунок 2.6 - Редуцированное минимальное покрытие
Определение CF-зависимостей по классам эквивалентности. Построение кольцевого покрытия