| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Базы Данных > Помогите с сотавлением структуры БД |
| Автор: Raiser 25.8.2006, 10:13 |
Здравствуйте. Пишу свой первый проект ![]() Есть два "верхних" раздела: Раздел1 и 2, возможно, необхожимо будет добавлять новые. В эти разделы помещаются ссылки, как Вы видите, в раздел 1 ссылки помещаются без дополнительной разбивки по подразделам. Но в разделе 2 ссылки разбиваются ещё на подразделы (2). Теперь по самим ссылкам, каждая описывается так "name", "description" и так же есть ссылки которые оформляются стандартным стилем (задан в CSS) это (1) и есть "спецссылки" (3) которые оформляются особым стилем (соотв. это надо как-то заносить в БД). И ещё про подразделы разделов - сейчас во 2м подразделы есть, но в 1м нет, но в будущем они соотв. могут понадобится. Как я себе представляю структуру: 1. есть таблица "divisions" - разделы, туда помещается инфа о разделах с такими полями: Name и DID - номер раздела. 2. Есть таблица "subdivisions" - подразделы разделов Далее, таблица со ссылками "links" , выглядит так: name - имя ссылки descriprion - описание razdelid - id раздела к которому относится podrazdelid - подраздел... style - имя стиля CSS, если ссылка оформляется особо, если это поле пустое - то ссылка оформляется по умолчанию. Мне не ясны такие вещи: как лучше построить базу и как выполнять запросы на занесение данных и выборку данных ? При выборке нет необходимости все по-отдеьности вытаскивать, небходимо вытаскивать сразу все. Вопрос, вижу большой и сложный, пожалуйста помогите |
| Автор: skyboy 25.8.2006, 11:21 |
| Raiser, как я понимаю, ссылки представляют собой дерево. А ограничена ли глубина вложенности? Или(потенциально, по крайней мере) у подразделов могут быть ещё подразделы? |
| Автор: Raiser 25.8.2006, 11:26 |
| Skyboy, нет, у подразделов не может быть ещё подразделов. |
| Автор: skyboy 25.8.2006, 12:04 |
| ссылка, независимо от уровня вложенности, обладает одними и теми же характеристиками? да? |
| Автор: Raiser 25.8.2006, 12:25 |
| Да, ссылки обладают одними и теми же характеристиками, и ссылка имеет либо "стандартный" вид, либо "специальный" вид. Так же ссылка может быть дочерней к разделу, либо дочерней к подразделу раздела. |
| Автор: skyboy 25.8.2006, 14:55 | ||
| 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. __________________ Теперь, что вытянуть узел, надо сделать так:
Так у тебя для нужного тебе узла будут: - текстовая строка для представления на странице - ссылка для перехода - имя класса - информация о стиле, которая слишком "уникальна", чтоб применять класс. Если уверен, что, например, у всех узлов будет указано имя класса, то замени LEFT JOIN nodes_classes на INNER JOIN nodes_classes. Работать будет в несколько раз быстрее. |