Пытаюсь разобраться с алгоритмом CLOPE. Дошла до тестового примера. Непонятно, что имеется в виду под количеством уникальных характеристик объектов - 116. А в псевдокоде непонятно обозначение [t,-]
Каждая транзакция имеет 22 атрибута, каждый атрибут имеет от 2 до 6 значений. Cуммарное количество всех значений всех атрибутов составляет 116.
@ATTRIBUTE class {e,p} //класс транзакции
@ATTRIBUTE cap-shape {b,c,x,f,k,s} // 6
@ATTRIBUTE cap-surface {f,g,y,s} //4
@ATTRIBUTE cap-color {n,b,c,g,r,p,u,e,w,y} //и т.д.
@ATTRIBUTE bruises {t,f}
@ATTRIBUTE odor {a,l,c,y,f,m,n,p,s}
@ATTRIBUTE gill-attachment {a,d,f,n}
@ATTRIBUTE gill-spacing {c,w,d}
@ATTRIBUTE gill-size {b,n}
@ATTRIBUTE gill-color {k,n,b,h,g,r,o,p,u,e,w,y}
@ATTRIBUTE stalk-shape {e,t}
@ATTRIBUTE stalk-root {b,c,u,e,z,r,?}
@ATTRIBUTE stalk-surface-above-ring {f,y,k,s}
@ATTRIBUTE stalk-surface-below-ring {f,y,k,s}
@ATTRIBUTE stalk-color-above-ring {n,b,c,g,o,p,e,w,y }
@ATTRIBUTE stalk-color-below-ring {n,b,c,g,o,p,e,w,y}
@ATTRIBUTE veil-type {p,u}
@ATTRIBUTE veil-color {n,o,w,y}
@ATTRIBUTE ring-number {n,o,t}
@ATTRIBUTE ring-type {c,e,f,l,n,p,s,z}
@ATTRIBUTE spore-print-color {k,n,b,h,r,o,u,w,y}
@ATTRIBUTE population {a,c,n,s,v,y}
@ATTRIBUTE habitat {g,l,m,p,u,w,d}
Итого: 116
Пересчитал три раза. Получил 126.
class {e,p} //класс транзакции e,p
cap-shape b,c,x,f,k,s 6
cap-surface f,g,y,s 4
cap-color n,b,c,g,r,p,u,e,w,y 10
bruises t,f 2
odor a,l,c,y,f,m,n,p,s 9
gill-attachment a,d,f,n 4
gill-spacing c,w,d 3
gill-size b,n 2
gill-color k,n,b,h,g,r,o,p,u,e,w,y 12
stalk-shape e,t 2
stalk-root b,c,u,e,z,r,? 7
stalk-surface-above-ring f,y,k,s 4
stalk-surface-below-ring f,y,k,s 4
stalk-color-above-ring n,b,c,g,o,p,e,w,y 9
stalk-color-below-ring n,b,c,g,o,p,e,w,y 9
veil-type p,u 2
veil-color n,o,w,y 4
ring-number n,o,t 3
ring-type c,e,f,l,n,p,s,z 8
spore-print-color k,n,b,h,r,o,u,w,y 9
population a,c,n,s,v,y 6
habitat g,l,m,p,u,w,d 7
Итого: 126
Требуется совет от профессионалов по кластеризации, на примере задачи о грибах. Столкнулся с вопросом нормализации таблицы:
p,x,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,u
e,x,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g
e,b,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m
…
А точнее с первой нормальной формой, которая говорит об атомарности.
На первом шаге есть два варианта:
«mushroom class» «property_1» «property_2» … «property_21» «property_22»
и
«mushroom class» «property_num» «property_value»
Но сначала рассмотрим пример на машинах в гараже. Есть список машин, которые находятся в гараже в таблице с колонками: «garage», «car1», «car2», «car3». Такой вид таблицы нарушает 1NF, т.к. колонки «car1», «car2», «car3» нарушают атомарность. Это может привести к той аномалии, когда в гараж добавляется четвертая машина, и тогда придется переделывать все, и БД и прикладную программу. Поэтому, необходимо делать так: «ragare», «carnumber», «car». Здесь колонка «carnumber» указывает номер машины 1, 2, или 3. И, если появляется четвертая машина, то нет необходимости добавлять новую колонку «car4», а всего лишь добавляется одна запись в таблицу, без изменения ее архитектуры. Это избавляет от указанной аномалии и придает атомарность.
Аналогично с грибами.
С одной стороны характеристики грибов с 1 по 22 может и не нарушают атомарность. Т.к. свойство 1 не означает его схожесть или один тип со свой1ством 2 или 3.
Например, если я делаю таблицу городов «название»«население»«площадь»«валовый доход», то здесь атомарность не нарушена, это разные атрибуты, в отличие от приведенного примера с гаражом.
Поэтому имеет смысл с грибами оставить первый вариант:
«mushroom class» «property_1» «property_2» … «property_21» «property_22»
Но при этом с другой стороны, характеристики грибов закодированы односимвольными значениями. И для универсальности работы прибегнуть к варианту номер два:
«mushroom class» «property_num» «property_value»
Что исключает аномалии добавления новой характеристики и добавляет удобство для построения прикладных программ. Есть же разница писать 22 строки с обращением к каждому свойству, или конструкцию типа: for each in «mushroom table».
С третьей стороны биологи не каждый день добавляют новые характеристики в классификацию грибов, и формат поставляемой базы грибов является устоявшимся.
И опять же, приложение должно быть универсальным. Некий биолог разработал свою таблицу характеристик грибов. Которая похожа на указанную. Только в ней, допустим, не 22 характеристики, а 20 или 24.
Какой бы вариант выбрали вы и почем? Спасибо за ответы.
P.S. Я лично склоняюсь к варианту два: «mushroom class» «property_num» «property_value»