Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с сотавлением структуры БД, И с запросами к этой БД 
:(
    Опции темы
Raiser
  Дата 25.8.2006, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 30.5.2006

Репутация: нет
Всего: нет



Здравствуйте. Пишу свой первый проект  smile Есть вот такая страничка со ссылками:
user posted image
Есть два "верхних" раздела: Раздел1 и 2, возможно, необхожимо будет добавлять новые.
В эти разделы помещаются ссылки, как Вы видите, в раздел 1 ссылки помещаются без дополнительной разбивки по подразделам. Но в разделе 2 ссылки разбиваются ещё на подразделы (2).
Теперь по самим ссылкам, каждая описывается так "name", "description" и так же есть ссылки которые оформляются стандартным стилем (задан в CSS) это (1) и есть "спецссылки" (3) которые оформляются особым стилем (соотв. это надо как-то заносить в БД).
И ещё про подразделы разделов - сейчас во 2м подразделы есть, но в 1м нет, но в будущем они соотв. могут понадобится.
Как я себе представляю структуру:
1. есть таблица "divisions" - разделы, туда помещается инфа о разделах с такими полями: Name и DID - номер раздела.
2. Есть таблица "subdivisions" - подразделы разделов smile, как я написал выше подразделов может и не быть совсем. Тут тоже соотв. name - имя, subdid - id подраздела, parentdid - id родительского раздела.
Далее, таблица со ссылками "links" , выглядит так:
name - имя ссылки
descriprion - описание
razdelid - id раздела к которому относится
podrazdelid - подраздел...
style - имя стиля CSS, если ссылка оформляется особо, если это поле пустое - то ссылка оформляется по умолчанию.

Мне не ясны такие вещи: как лучше построить базу и как выполнять запросы на занесение данных и выборку данных ?
При выборке нет необходимости все по-отдеьности вытаскивать, небходимо вытаскивать сразу все.
Вопрос, вижу большой и сложный, пожалуйста помогите  smile 
PM MAIL   Вверх
skyboy
Дата 25.8.2006, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Raiser, как я понимаю, ссылки представляют собой дерево. А ограничена ли глубина вложенности? Или(потенциально, по крайней мере) у подразделов могут быть ещё подразделы?
PM MAIL   Вверх
Raiser
Дата 25.8.2006, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 30.5.2006

Репутация: нет
Всего: нет



Skyboy, нет, у подразделов не может быть ещё подразделов.
PM MAIL   Вверх
skyboy
Дата 25.8.2006, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



ссылка, независимо от уровня вложенности, обладает одними и теми же характеристиками? да?
PM MAIL   Вверх
Raiser
Дата 25.8.2006, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 30.5.2006

Репутация: нет
Всего: нет



Да, ссылки обладают одними и теми же характеристиками, и ссылка имеет либо "стандартный" вид, либо "специальный" вид.
Так же ссылка может быть дочерней к разделу, либо дочерней к подразделу раздела.
PM MAIL   Вверх
skyboy
Дата 25.8.2006, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Raiser, тогда делай единый список. Не разбивай на разные таблицы. С опытом научишься радоваться тому, что можно единообразно работать с разными(по представлению, а не по сути) объектами.
Итак. 
Моё предложение: все объекты сделать одинаковыми и равноправными. Причём, как то,что у тебя сейчас идёт как ссылка, так и заголовки разделов(можно будет без проблем подвесить к ним ссылки в будущем):

nodes:
idNode integer(10) autoinc
text varchar(255)
primary index idNode
Тут мы храним все наши текстовые значения ссылок и названий разделов
__________________
nodes_tree:
idNode integer(10)
idParent integer(10)
primary index idNode, idParent
Тут мы храним наше дерево: предка для каждого узла. Узлы верхнего уровня(твои разделы) имеют предка 0.
Пожалуй, стоит добавить уникальный индекс на поле idNode,  чтоб у узла не могло быть более одного родителя. В данном случае, как я понял,  нужны деревья, а не графы...
__________________
nodes_location:
idNode integer(10)
location varchar(255)
primary index idNode
Тут у нас  URI для тех товарищей, кто у нас ссылкой работает.
__________________
classes
idClass integer(10) autoinc
className varchar(255)
primary index idClass
Список имён CSS-классов наших узлов
__________________
nodes_classes
idNode integer(10)
idClass integer(10)
primary index idNode, idClass
index unique idNode
Тут мы привязываем к каждому узлу свой CSS-класс(каждый класс может быть привязан к нескольким узлам, но узел может иметь одновременно не более одного класса)
__________________
nodes_inline_styles
idNode integer(10)
style varchar(255)
Здесь хранятся "встроенные" стили, задаваемые аттрибутом style.
__________________
Теперь, что вытянуть узел, надо сделать так:
Код

SELECT n.text,nl.location,c.className,nis.style
FROM nodes n
LEFT JOIN nodes_locations nl
ON nl.idNode=n.idNode
LEFT JOIN nodes_classes nc
ON ns.idNode=n.idNode
LEFT JOIN classes c
ON c.idClass=nc.idClass
LEFT JOIN nodes_inline_style nis
ON nis.idNode=n.idNode
WHERE n.idNode=<some id>

Так у тебя для нужного тебе узла будут:
- текстовая строка для представления на странице
- ссылка для перехода
- имя класса
- информация о стиле, которая слишком "уникальна", чтоб применять класс.
Если уверен, что, например, у всех узлов будет указано имя класса, то замени LEFT JOIN nodes_classes на INNER JOIN nodes_classes.
Работать будет в несколько раз быстрее.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0453 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.