2010-02-14 4 views
0

У меня вопрос о наилучшей практике для реляционных баз данных и иерархий. Мой вопрос: более разумно использовать текстовые или int (id) иерархии?int (id) или текстовые иерархии?

У меня есть иерархия, но она не является идентификационной. Иерархия основана на тексте , например. 'level1', 'level2' в отличие от id1, id2

Я использую mysql, а также solr для управления моими данными.

В настоящий момент я сохранил иерархию текста, поэтому могу использовать это, если захочу. Но для создания иерархии идентификаторов (что я также сделал) кажется более здоровым. Иерархии Int (id) также кажутся быстрее и на самом деле не подвержены ненормализованным данным (мне никогда не нужно обрезать() идентификаторы и т. Д.)

Любые мысли об этом очень ценятся. Было бы интересно узнать, что другие считают лучшей практикой.

Приветствие

Ke

ответ

1

Я имею тенденцию использовать оба варианта, если мне нужно получить поддеревья.

Строки имеют 2 столбца int, состоящие из id и parentId. Это составляет древовидную структуру.

Кроме того, у меня также есть текстовый уровень, представляющий индексы родительской строки. например строка с idName = "44.21.31" будет иметь идентификатор 31, родительский идентификатор из 21, а его великий родитель будет иметь идентификатор 44. Таким образом вы можете получить поддеревья, `где idName like" 44.21.% "будет выборка каждого ребенка, большого ребенка и т. д. строки с идентификатором 21.

Это нарушает нормальную форму, хотя теперь имеется избыточная информация об идентификаторе объекта, но это может быть полезно, особенно для систем db, которые в противном случае не поддерживает иерархические структуры.

+0

Я сохранил оба, как вы упоминаете, поэтому, если мне нужно использовать текстовую информацию, тогда это возможно. Спасибо за это, действительно очищает вещи для меня. Я посмотрю, как я уйду, если я столкнусь с проблемами со скоростью, я думаю, что всегда могу удалить лишние данные. Большое спасибо за эти ответы. –

1

Я предпочитаю использовать Интс - они быстрее и меньше и не должны быть изменены, как текст на основе одного могущества, так как они не содержат Sematic значения.

+0

Im так рад, что вы это сказали :). Я не полный noob, но и не DB wizzkid. Я думал, что иду в правильном направлении, скорость важна, и Int также кажется лучшим способом поддерживать строгие отношения между иерархиями. Изменение этого также будет большим обходным решением для моего приложения, так что вы действительно считаете, что это лучший способ. Я не знаю, что бы я сделал без stackoveflow. Надеюсь, у вас отличный день. –

1

, если вы используете иерархию на основе идентификатора, будет иметь лучшую производительность. но вы можете использовать два столбца в своем db, которые резервируют для вас два кода (IDCode и Code). этот код сделал так:

Child Code = IDCODE + Родитель код

сделать внимание, что IDCODE является уникальным.

Это решение не очень хорошо, потому что вам нужны некоторые операции для обработки этой работы.