int (id) или текстовые иерархии? - PullRequest
0 голосов
/ 14 февраля 2010

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

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

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

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

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

Приветствия

Ke

Ответы [ 3 ]

1 голос
/ 14 февраля 2010

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

дочерний код = IDCode + родительский код

обратите внимание, что IDCode уникален.

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

1 голос
/ 14 февраля 2010

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

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

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

Хотя это нарушает нормальную форму, теперь есть избыточная информация об id объекта - но это может стоить того, особенно для систем БД, которые иначе не поддерживают иерархические структуры.

1 голос
/ 14 февраля 2010

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

...