Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Структура базы данных сайта
 
 автор: dedev   (07.11.2006 в 17:12)   письмо автору
 
 

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

Сайт имеет структуру

Раздел1
     Подраздел 1
           Под-подраздел 1
           Под-подраздел 2
           Под-подраздел n
     Подраздел 2
     Подраздел 3
          Под-подраздел 1
          Под-подраздел 2
          Под-подраздел n
     Подраздел n
Раздел 2
     Подраздел 1
     Подраздел 2
     Подраздел n
Раздел n
     Подраздел 1
     Подраздел 2
     Подраздел n

И так далее вложенность, может быть любая.
Ссылки с этого форума на аналогичные темы приветствуются

   
 
 автор: sd607   (07.11.2006 в 18:02)   письмо автору
 
   для: dedev   (07.11.2006 в 17:12)
 

Если не требуется считать кол-во всех подразделов раздела, то вот решение в одну таблицу:


id int
level int DEFAULT 0
parent_id int
subject_name text,tinytext или varchar 
...


Где id - он и в Африке id
level - уровень, можно обойтись и без него. Но например, если 0, значит корень :-)
parent_id - id родительского раздела
subject_name - имя раздела

ps В этой таблице можно вкладывать уровни до потери пульса.
ps Поправка. Кол-во подразделов в разделе считать можно, но если речь идет о подразделах В подразделах, тогда сам буду рад увидеть какое-либо мудрое решение. Иначе масса лишних запросов к базе.

   
 
 автор: dedev   (07.11.2006 в 23:25)   письмо автору
 
   для: sd607   (07.11.2006 в 18:02)
 

Подскажите, вопрос к предложенной структуре
Есть, таблица

(1, '0', 'Раздел 1');  
(2, '0', 'Раздел 2');  
(3, '1', 'Подраздел в разделе 1');  
(4, '2', 'Подраздел в разделе 2');  
(5, '0', 'Раздел 3');  
(6, '5', 'Подраздел в разделе 3');  
(7, '6', 'Под-подраздел в разделе 3');

вторая таблица

(7, '6', 'статья в под-подраздел в разделе 3');

как мне запросом получить, что эта статья относится к разделу “Раздел3”

   
 
 автор: sd607   (07.11.2006 в 23:52)   письмо автору
 
   для: dedev   (07.11.2006 в 23:25)
 

Создаем таблицу:


CREATE TABLE TOPICS (
id INT NOT NULL auto_increment,
parent_id INT NOT NULL,
topic_text TEXT,
PRIMARY KEY  (id)
)


И выполнить в нее вставку:


insert into TOPICS(parent_id,topic_text) values(7,'статья в под-подраздел в разделе 3');


Где 7 - код раздела (подраздела) к которому относится статья.

Статью добыть станет совсем просто:

<a href="index.php?id=7">Под-подраздел в разделе 3</a>

и далее:


<?php
$id
=preg_replace("/[^0-9]/s" "" $_GET['id']);
$query='select topic_text from topics where parent_id='.$id;
...
?>


В общем таким запросом мы узнаем что статья относится к "Под-подраздел в разделе 3". А зачем знать, что она именно к Разделу 3? Просто у меня есть похожая структура на одном из сайтов и не возникало такой потребности. Посетитель плавно прыгает из раздела в подраздел и выбирает то, что ему интересно. Хотя конечно требования у всех разные. Можно попробовать подобавлять доп. поля в таблицы и передовать в них id головных разделов каким-то образом. Но это топорно выйдет. А можно подождать более элегантного решения для этого случая от кого-то еще :-)


Если требуется знать только корневой раздел, тогда вот такой вариант:


CREATE TABLE TOPICS (
id INT NOT NULL auto_increment,
root_id INT NOT NULL,
parent_id INT NOT NULL,
topic_text TEXT,
PRIMARY KEY  (id)



где root_id - id корневого раздела, parent_id - подраздела.

Либо создать целую лестницу запросов поднимающуюся к корневому разделу статьи по полям parent_id. ИМХО то, что можно получить из предложенной структуры.

   
 
 автор: dedev   (09.11.2006 в 12:28)   письмо автору
 
   для: sd607   (07.11.2006 в 23:52)
 

Может для связи, между разделами, подразделами и конечной статьей ввести, что-то типа кода, т.е. где 1 цифра – корневой раздел, 2 – подраздел, 3 – под-подраздел
Вложенность может быть получается любая

Таблица №1 “раздел”
1      раздел1
11    подраздел1 раздела1
12    подраздел2 раздела1
121  под-подраздел подраздела2 раздела1
 2     раздел2
и т.д.

таблица №2 “статьи”
11     статья1
121   статья2
2       статья2

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

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

Мысли-вопрос, как правильно организовать сортировку по коду раздела?

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

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования