|
|
|
| Собираюсь перевести сайт на базу данных, в связи с этим появился вопрос, как более оптимально организовать структуру базы данных. Хотелось бы послушать советы более опытных, чем я товарищей в этом вопросе.
Сайт имеет структуру
Раздел1
Подраздел 1
Под-подраздел 1
Под-подраздел 2
Под-подраздел n
Подраздел 2
Подраздел 3
Под-подраздел 1
Под-подраздел 2
Под-подраздел n
Подраздел n
Раздел 2
Подраздел 1
Подраздел 2
Подраздел n
Раздел n
Подраздел 1
Подраздел 2
Подраздел n
|
И так далее вложенность, может быть любая.
Ссылки с этого форума на аналогичные темы приветствуются | |
|
|
|
|
|
|
|
для: 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 Поправка. Кол-во подразделов в разделе считать можно, но если речь идет о подразделах В подразделах, тогда сам буду рад увидеть какое-либо мудрое решение. Иначе масса лишних запросов к базе. | |
|
|
|
|
|
|
|
для: 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” | |
|
|
|
|
|
|
|
для: 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. ИМХО то, что можно получить из предложенной структуры. | |
|
|
|
|
|
|
|
для: 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. а если создать таблицу и вывести отдельно идентификатор раздела и идентификатор статьи, то каждую статью можно привязать к нескольким разделам
Мысли-вопрос, как правильно организовать сортировку по коду раздела?
Просто, хочется использовать максимально удобную структуру с самого начала, чтобы в последующем не возникло необходимости переделывать ее(структуру), хотелось бы послушать предложения по оптимальной организации структуры базы данных для сайта, а еще и универсальной, наскока это возможно. | |
|
|
|
|