Я хотел бы найти каноническое покрытие или минимальное количество функциональных зависимостей в базе данных.
Например:
Если у вас есть: Таблица = (A, B, C) < - это столбцы: A, B, C
И зависимости:
A → BC
B → C
A → B
AB → C
Каноническое покрытие (или минимальное количество зависимостей):
A → B
B → C
Есть ли программа, которая может это сделать? Если нет, любой код/псевдокод, чтобы помочь мне написать один, будет оценен. Предпочитаете на Python или Java.
Похоже, вы можете реорганизовать любые правила формы:
A -> BC
в
A -> B
и
A -> C
и любых правил вида:
AB -> C
в
A -> C
и
B -> C
После этого рефакторинга вы должны иметь набор правил одиночных пар:
X -> Y
(Вероятно, с большим количеством избыточных копий можно сразу удалить). Это формирует частичный порядок, который, как представляется, ссылался на rlotun.
Для примера до сих пор вы заканчиваете:
A -> B
B -> C
A -> C
Если вы затем минимизируете частичный порядок (например, удаляете любые избыточные ссылки, любые книги по структуре данных на частичном языке должны сообщать вам, как это сделать), вы будете имеют минимальный частичный порядок, и я думаю, что ответ вы хотите. Минимизируя частичный порядок в примере, вы должны удалить A → C из частичный порядок, заканчивающийся вашим ответом.
Посмотрев на свои зависимости, вы можете просмотреть их как частичный порядок на A, B, C
. То, что вы хотите, звучит очень похоже (но не полностью) топологическая сортировка (частичный порядок сортировки на направленном ациклическом графе).