|
|
|
Загнать иерархию в базу
|
|||
|---|---|---|---|
|
#18+
Привет всем, интересует такой вопрос: К примеру у нас имеется файловая структура (диск c: например), нужно дерево имен файлов и папок хранить в базе данных. Как должна выглядеть модель базы в таком случае? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2009, 06:33 |
|
||
|
Загнать иерархию в базу
|
|||
|---|---|---|---|
|
#18+
xrwПривет всем, интересует такой вопрос: К примеру у нас имеется файловая структура (диск c: например), нужно дерево имен файлов и папок хранить в базе данных. Как должна выглядеть модель базы в таком случае? Есть куча вариантов: 1. Хранить полные пути к каждому файлу просто текстовой строкой. Основное достоинство - скорость поиска, вставки, удаления + простота структуры. 2. Табличка папки, табличка файлы. табличка нахождения файла в папке (помним про мнемонические ссылки в NTFS) где один и тот же файл может быть в нескольких папках. P.S. ты случайно не EPAM на собеседование ходил? :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2009, 10:09 |
|
||
|
Загнать иерархию в базу
|
|||
|---|---|---|---|
|
#18+
xrwПривет всем, интересует такой вопрос: К примеру у нас имеется файловая структура (диск c: например), нужно дерево имен файлов и папок хранить в базе данных. Как должна выглядеть модель базы в таком случае? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2009, 10:13 |
|
||
|
Загнать иерархию в базу
|
|||
|---|---|---|---|
|
#18+
Дмитрий16 P.S. ты случайно не EPAM на собеседование ходил? :-) Не это не йа :) Senya_L, при таком подходе как мне можно будет сформировать полный путь и вычислить уровень вложенности конечного элемента? По идее нужно будет пробежаться по всем idParent в иерархии, не слишком ли это накладно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2009, 10:36 |
|
||
|
Загнать иерархию в базу
|
|||
|---|---|---|---|
|
#18+
xrwДмитрий16 P.S. ты случайно не EPAM на собеседование ходил? :-) Не это не йа :) Senya_L, при таком подходе как мне можно будет сформировать полный путь и вычислить уровень вложенности конечного элемента? По идее нужно будет пробежаться по всем idParent в иерархии, не слишком ли это накладно?Корневые элементы выбираем как Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2009, 10:59 |
|
||
|
Загнать иерархию в базу
|
|||
|---|---|---|---|
|
#18+
xrwДмитрий16 P.S. ты случайно не EPAM на собеседование ходил? :-) Не это не йа :) Senya_L, при таком подходе как мне можно будет сформировать полный путь и вычислить уровень вложенности конечного элемента? По идее нужно будет пробежаться по всем idParent в иерархии, не слишком ли это накладно? Вот и еще один плюс хранения полного пути - он сразу есть :-) + еще добавить колонки на расширение, отдельно имя, даты создания, доступа, модификации, флаги. Уровень вложенности = количество символов '\' :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2009, 12:33 |
|
||
|
Загнать иерархию в базу
|
|||
|---|---|---|---|
|
#18+
Дмитрий16Вот и еще один плюс хранения полного пути - он сразу есть :-)Это недостаточный повод делать через ж@пу. Сделайте правильно, а если не устраивает скорость - сделайте денормализацию. Аккуратно, с обновлением иерархии в триггерах или ХП, но это потом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2009, 16:01 |
|
||
|
Загнать иерархию в базу
|
|||
|---|---|---|---|
|
#18+
Senya_LДмитрий16Вот и еще один плюс хранения полного пути - он сразу есть :-)Это недостаточный повод делать через ж@пу. Сделайте правильно, а если не устраивает скорость - сделайте денормализацию. Аккуратно, с обновлением иерархии в триггерах или ХП, но это потом. Ну это не мне. а про ж@опу - так ведь все условиями использования задается. А они не заданы. И, например при количестве файлов 10 штук городить деревья просто глупо. Хотя это и классика. Поэтому ставить диагноз что правильно а что нет я бы не стал. А вообще вот тут есть почти готовый пример ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 12:40 |
|
||
|
Загнать иерархию в базу
|
|||
|---|---|---|---|
|
#18+
Дмитрий16Ну это не мне. а про ж@опу - так ведь все условиями использования задается. А они не заданы. И, например при количестве файлов 10 штук городить деревья просто глупо. Хотя это и классика.Вам, вам... Вы же предлагаете. При том непонятно предлагаете: с одной стороны говорите, что деревья - это классика, с другой - деревья глупо. Я еще раз говорю: обычная практика такова, что изначально делать надо правильно, т.е. в соответствии с реляционной теорией. А если в процессе эксплуатации выявляется низкая производительность запросов на "правильной" структуре, то переходят к аккуратной денормализации, с поддержанием ссылочной и прочей целостности на триггерах, в ХП или еще как. Вы предлагаете сделать все наоборот, так что не соглашусь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 12:51 |
|
||
|
Загнать иерархию в базу
|
|||
|---|---|---|---|
|
#18+
Senya_L..., с поддержанием ссылочной и прочей целостности на триггерах,.... Ахтунг :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 13:03 |
|
||
|
Загнать иерархию в базу
|
|||
|---|---|---|---|
|
#18+
Я вот скоро программку свою доделаю, выложу сюда и споров появится ещё больше :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 13:20 |
|
||
|
Загнать иерархию в базу
|
|||
|---|---|---|---|
|
#18+
Дмитрий16Senya_L..., с поддержанием ссылочной и прочей целостности на триггерах,.... Ахтунг :-)А как Вы думали? HierarchyId есть пока только в MSSQL 2008, а далеко не все его использут. И даже не все используют MSSQL вообще. :) Я лишь сказал, что это крайние меры, когда требования к скорости не обеспечиваются структурой БД. Какие Ваши предложения помимо криков "ахтунг"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 13:21 |
|
||
|
Загнать иерархию в базу
|
|||
|---|---|---|---|
|
#18+
xrwЯ вот скоро программку свою доделаю, выложу сюда и споров появится ещё больше :)Программку сюда не надо. Структуру БД - можно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 13:26 |
|
||
|
Загнать иерархию в базу
|
|||
|---|---|---|---|
|
#18+
Senya_LДмитрий16Senya_L..., с поддержанием ссылочной и прочей целостности на триггерах,.... Ахтунг :-)А как Вы думали? HierarchyId есть пока только в MSSQL 2008, а далеко не все его использут. И даже не все используют MSSQL вообще. :) Я лишь сказал, что это крайние меры, когда требования к скорости не обеспечиваются структурой БД. Какие Ваши предложения помимо криков "ахтунг"? Ну для начала я бы выяснил каких операций будет больше и на каких нужно обеспечить наибольшее быстродействие. Выснить примерный объем данных (минимум и максимум) ну а уже исходя из условий решать какой вариант структуры лучше подойдет. Например, в планарной структуре (блин я что зря везеде смайлики рисовал) процедура создания множества вложенных папок - это _один_ инсерт. против многих в иерархической. и в тоже время перемещение папки в папку быстрее в иерархической против планарной. Поэтому я и говорю, что заочно не зная какие предъявляются требования - сложно говорить о том, какая структура правильная. У каждой свои + и -. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 13:28 |
|
||
|
Загнать иерархию в базу
|
|||
|---|---|---|---|
|
#18+
Дмитрий16У каждой свои + и -.Кстати, о птичках (С). То, что Вы называете "планарной структурой" реализовано в КЛАДРе. И эта структура вызывает самые неоднозначные оценки. Лично я всегда переделывал КЛАДР в обычное дерево. Кто-то раскидывает по нескольким табличкам, но не видел ни разу, чтобы кто-то оставлял все 'as is'. Причину могу указать на примере: Требуется : выбрать все регионы Решение "планарное" : Код: plaintext 1. 2. 3. Решение "иерархическое" Код: plaintext 1. 2. 3. 4. Так что вижу только минусы. Плюсов не наблюдается. Массовые вставки, если только, да и то... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 13:47 |
|
||
|
Загнать иерархию в базу
|
|||
|---|---|---|---|
|
#18+
Senya_L Решение "иерархическое" Код: plaintext 1. 2. 3. 4. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 13:50 |
|
||
|
Загнать иерархию в базу
|
|||
|---|---|---|---|
|
#18+
Ну KLADR - это вообще ужас. Такую фигню сделать - это еще суметь надо :-) Кстати кладр это даже и планарная табличка в целом то. Кладр можно было бы считать планарным если бы он весь был в одной _очень_ большой таблице и GUID в качестве идентификатора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 14:08 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36030463&tid=1543195]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
185ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 502ms |

| 0 / 0 |
