Хранение структурированных документов в SQL

untied

Сдвинутый новичок
Хранение структурированных документов в SQL

Может кто сталкивался с похожей задачей и поделится опытом (или соображениями)...

Требуется хранить в базе данных SQL структурированную документацию (различные нормативные акты, но не в этом суть). Хранение в виде длинной портянки не катит: в базе должна сохраняться именно разбивка документа на древовидную структуру: документ -> главы -> статьи -> параграфы -> пункты... Структура документов не задана жестко, в одном документе верхним объектом иерархии будет глава, в другом -- статья, и т.д. Кроме того, могут быть примечания (к всему документу, к главе и т.д.)
Ну то есть типично древовидная структура, которую, в принципе, реализовать несложно.

Но. Тут надо подумать еще и об удобстве оператора, который будет эту информацию вбивать. Нужно, чтобы ему было удобно, а документы вводились оперативно...

Если кто-нибудь сталкивался с подобным -- поделитесь опытом, plz.
Спасибо.
 

fixxxer

К.О.
Партнер клуба
>типично древовидная структура

В вопрос не вникал, но сразу могу посоветовать посмотреть в сторону Nested Sets.
По крайней мере, если ты теоретически можешь представить свои "структурированные документы" в виде XML - это то, что тебе нужно.
 

Tofik

Новичок
Столкнулся с этой проблемой до того, как узнал о Nested Sets, поэтому у меня есть проекты, использующие "моё" хранение. Вот думаю, стоит переписывать или сойдёт.
Вкратце моя логика:
В базе есть поле, которое содержит инфу о пути (напр. /razdel/podrazdel/). Чтобы отобразить всю ветку использую следующюю функцию:

function print_block($path="/")
{
$block=get_blocks($path);
echo "<ul>";
for($i=1;$i<=count($block);$i++)
{
echo "<li><a href=\"?path=".$block[$i]['path']."\">".$block[$i]['title']."</a></li>";
print_block($block[$i]['path']);
echo "</ul>";
}
}

где get_blocks:

function get_blocks($path)
{
$query=mysql_query("SELECT * FROM `site` WHERE path REGEXP '^".$path."([^/][a-z0-9_-]+)/$' ORDER BY `id` ASC");
for($i=1;$row=mysql_fetch_row($query);$i++)
{
$res[$i]['path']=$row[1];
$res[$i]['title']=$row[2];
}
return $res;
}


Чтобы по сто раз не выполнять скрипт, который генерирует навигацию для сайта, я сделал запись навигации в файл каждый раз, когда админ меняет структуру сайта. И когда юзер обращается к странице - навигация выводится из файла, не обращаясь к базе.

Теперь очень удобно перемещать разделы. Пример работы можно посмотреть на www.zavod.by/test/admin/

Напишите своё отношение к этой реализации.
 

Нечто

Психолог РНРClub
Походит на XML, так что придется выбирать между Edge table (лучше inline) и теми же Nested sets.
 
Сверху