Вернуться   Форум программистов > Форум Базы данных > Форум Базы Данных

Базы Данных

Общие вопросы по Базам Данных

Ответ
 
Старый 27.06.2007, 23:39   #1
Vizlim
Местный
 
Регистрация: 16.08.2005
Сообщений: 269
Vizlim пока не определено
По умолчанию "Нитевая" структура БД

Слышал о том, что современные форумы используют "Нитевую" структуру БД...

Интересно посмотреть на пример построение БД с использованием данной структуры...

И какие её достоинства и недостатки по сравнению с обычной древовидной структурой и со сбалансированном деревом (B-дерево)...
Vizlim вне форума  
Старый 28.06.2007, 00:31   #2
bazile
Местный
 
Регистрация: 05.01.2001
Сообщений: 6,924
bazile пока не определено
По умолчанию RE: "Нитевая" структура БД

Нитевая структура? Что это такое?
bazile вне форума  
Старый 28.06.2007, 01:25   #3
Vizlim
Местный
 
Регистрация: 16.08.2005
Сообщений: 269
Vizlim пока не определено
По умолчанию RE: "Нитевая" структура БД

Цитата:
bazile (27.06.2007)
Нитевая структура? Что это такое?


Впервые о ней услышал тут: http://php.ru/forum/viewtopic.php?t=6199
Vizlim вне форума  
Старый 28.06.2007, 15:19   #4
bazile
Местный
 
Регистрация: 05.01.2001
Сообщений: 6,924
bazile пока не определено
По умолчанию RE: "Нитевая" структура БД

Мне кажется что имеется в виду следующее: в виде дерева представляются только форумы, а сами сообщения хранятся как список.
bazile вне форума  
Старый 28.06.2007, 18:42   #5
Vizlim
Местный
 
Регистрация: 16.08.2005
Сообщений: 269
Vizlim пока не определено
По умолчанию RE: "Нитевая" структура БД

Цитата:
bazile (28.06.2007)
Мне кажется что имеетсяв виду следующее: в виде дерева представляются только форумы, а сами сообщения хранятся как список.


Тоесть нечно на подобие:



tems:

id | Категория | tema | scil | kol-vo_tem | posl_mess | levelz |

1 | Общее | О форуме | podtema1 | 1 | Admin | true |

2 | Общее | О форуме2 | podtema2 | 1 | Admin | true |



podtema1:

ids | podtema | scil | num_mess | posled_mess | data | levelz |

1 | Новая тема | messagers1 | 1 | Admin | 2006-09-14 14:57:08 | false |

2 | Новая тема2 | messagers2 | 1 | Admin | 2006-09-14 15:30:05 | false |



messagers1:

ids | nick | messages |

1 | Admin | Сообщение |



messagers2:

ids | nick | messages |

1 | Admin | Сообщение |
Vizlim вне форума  
Старый 28.06.2007, 19:15   #6
bazile
Местный
 
Регистрация: 05.01.2001
Сообщений: 6,924
bazile пока не определено
По умолчанию RE: "Нитевая" структура БД

Не смог твой пример понять. Ты бы хоть пояснил для чего каждая таблица нужна. Из "информативного" названия messagers2, например, это понять нельзя. Тоже самое касается названия поля scil.
Я имел в виду такую структуру БД, когда в таблице со списком форумов есть поле вроде Parent_ID указывающее на форум-родитель. Для тем же в качестве родителя выступает только ID форума. Например так:
Цитата:
-- Форумы
CREATE TABLE forum
(
iForum_ID int NOT NULL PRIMARY KEY,
iParentForum_ID int NULL,
sForumName varchar NOT NULL,
)
-- Темы в форуме
CREATE TABLE topic
(
iTopic_ID int NOT NULL PRIMARY KEY,
iForum_ID int NOT NULL,
iUser_ID int NOT NULL, -- Автор темы
sTopicName varchar NOT NULL, -- Название темы
sTopicBody varchar NOT NULL, -- Текст темы
dtCreated datetime NOT NULL, -- Дата создания темы
)
-- Ответы на тему
CREATE TABLE topic_reply
(
iTopicReply_ID int NOT NULL PRIMARY KEY,
iTopic_ID int NOT NULL,
iUser_ID int NOT NULL, -- Автор ответа
sReplyBody varchar NOT NULL, -- Текст ответа
dtCreated datetime NOT NULL, -- Дата создания ответа
)
bazile вне форума  
Старый 28.06.2007, 21:36   #7
Vizlim
Местный
 
Регистрация: 16.08.2005
Сообщений: 269
Vizlim пока не определено
По умолчанию RE: "Нитевая" структура БД

Цитата:
bazile (28.06.2007)
Не смог твой пример понять. Ты бы хоть пояснил для чего каждая таблица нужна. Из "информативного" названия messagers2, например, это понять нельзя. Тоже самое касается названия поляscil.


-- Форумы

CREATE TABLE tems

(

id INT AUTO_INCREMENT PRIMARY KEY,

categori TINYTEXT, -- категория к который относятся темы

tema TINYTEXT, -- название темы

scil TINYTEXT, -- Ссылка на подтемы (название таблицы), данной темы

num_tem INT, -- кол-во тем

posl_mess TINYTEXT, --кто оставил последнее сообщение

levelz TINYTEXT -- Вложенность, уровень

)



-- Темы в форуме

CREATE TABLE "Ссылка на подтемы (название таблицы), данной темы"

(

ids INT AUTO_INCREMENT PRIMARY KEY,

podtema TINYTEXT, -- Название подтемы

scils TINYTEXT, -- Ссылка на сообщение (название таблицы), данной подтемы

num_mess INT, -- кол-во сообщений в теме

posled_mess TINYTEXT, -- кто оставил последнее сообщение в теме

datazz DATETIME, -- дата создания

levelz TINYTEXT -- Вложенность, уровень

)



-- Ответы на тему

CREATE TABLE "Ссылка на сообщение (название таблицы), данной подтемы"

(

ids INT AUTO_INCREMENT PRIMARY KEY,

nickname TINYTEXT, -- Логин

messaga LONGTEXT, -- Сообщение

datazz TINYTEXT -- дата

)



зы: как заполнчются поля в моём предыдущем посте =)



ззы: при каждой новой теме форума либо подтеме форума создаёться новая таблица...

Тоесть при наличии одной темы и 5 подтем имеем 6 таблиц...

при наличие 4 тем... и 0 подтем в каждой имеем 4 таблицы...



Цитата:
Я имел в виду такую структуру БД, когда в таблице со списком форумов есть поле вроде Parent_ID указывающее на форум-родитель. Для тем же в качестве родителя выступает только ID форума.


Мне интересно, если у нас есть только три таблицы и вних хранятся скажем "ccылки" на нужные данные, то если данных в таблице будет 1 миллион, то как скажется это на быстродействии, если при выборке нужных данных мы используем запрос SELECT (поиск)... при условии, что он проходится по всем записям в таблице...



И возникает ещё один вопрос, какая из структур будет эффективнее в работе... та которая имеет допустим 1 миллион таблиц либо структура с тремя таблицами с 1 миллионом полей и "ссылками" на данные в эти таблицы?
Vizlim вне форума  
Старый 29.06.2007, 01:30   #8
bazile
Местный
 
Регистрация: 05.01.2001
Сообщений: 6,924
bazile пока не определено
По умолчанию RE: "Нитевая" структура БД

Подобная схема имеет ряд серьезных недостатков:<OL><LI>Для запросов придется использовать динамический SQL, что само по себе сразу ухудшает производительность.</LI><LI>Лишние накладные расходы на хранение большого кол-ва таблиц. Ведь кроме собственно данных есть еще и служебная информация о таблице. Плюс возможность (пусть даже и теоретическая) натолкнуться на физические ограничения СУБД на кол-во таблиц.</LI><LI>Создание тем и форумов будет требовать больше времени так как сначала требуется создать таблицу, после чего уже записывать данные.</LI><LI>Следствием п.3 является необходимость наличия у пользователя повышенных привилегий что противоречит общепринятой практике работы с минимально необходимыми привилегиями.</LI><LI>Сложнее будет сделать поиск, отбор всех сообщений пользователя и тому подобную функциональность.</LI><LI>Реляционные схемы построения базы обычно активно применяют механизмы защиты целостности базы предоставляемые самой СУБД. Например, внешние ключи. В данном же случае нельзя заранее создать отношения типа FOREIGN KEY. То есть надо или вообще отказываться от механимзмов зашиты - что глупо - или создавать подобные связи на лету вместе с таблицей - что влечет еще большие накладные расходы.</LI></OL>
Как итог: это плохая идея. Раз у нас реляционные СУБД, то и базы надо строить соответственно. Иначе жди проблем.
Насчет скорости работы тоже думаю все понятно.
bazile вне форума  
Старый 29.06.2007, 02:44   #9
Vizlim
Местный
 
Регистрация: 16.08.2005
Сообщений: 269
Vizlim пока не определено
По умолчанию RE: "Нитевая" структура БД

Огромнейшее тебе СПАСИБО bazile, за помощь в структуре БД для форумов, а так же за разъяснения =))))))))))))))))))))))))))))))))))))))))
Vizlim вне форума  
Старый 29.06.2007, 14:55   #10
bazile
Местный
 
Регистрация: 05.01.2001
Сообщений: 6,924
bazile пока не определено
По умолчанию RE: "Нитевая" структура БД

Пожалуйста.
bazile вне форума  
Ads
Ответ
Опции темы

Похожие темы
Тема Автор
Builder C++ и Oracle Базы Данных
Подскажите, где можно почитать про работа с Oracle в <STRONG>Builder C</STRONG>++<STRONG> ? Желательно, что бы литература была ориентирована на новичка (т.е. написано как подключится средсвами...
luchik
помогите с FoxPro- Grid Базы Данных
у меня есть таблица и есть форма с обектом грид ..... (как присвоить таблицу объекту grid я знаю)....как сделать так чтобы объект grid заполнила таблица с условием что одно из полей имеет некоторое...
Chrono
Базы Данных Как подсчитать сумму по месяцам
У меня есть запрос, который работает : select date_o,sum(SUMMA) from mt_12007 group by date_o И я хочу чтобы он подсчитывал сумму по месяцам, пробовал так, но не работает! select...
bax
Базы Данных CMS-системы для создания прикладных программ
Здравствуйте! Подскажите кто что думает... Существует множество CMS-систем для управления сайтом. А существуют ли подобные системы для создания прикладных программ? Если не существуют - то почему...
aleksmir
Базы Данных ADO+Excel: пропадает последняя строка
Читаю Excel-файлы через ADO. До сих пор всё было нормально, но вот появился такой Excel-файл, при чтении которого ADO игнорирует последнюю строку. То есть RecordSet.RecordCount на единицу меньше, чем...
hiparick
Изменить Connection string при выполнении программы Базы Данных
Проблема. Создал визардом datasource и надо заменить Connection string во время работы - место расположения базы заранее неизвестно. Как это сделать? (VS2005, C#)
V.Aks



Текущее время: 10:29. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.

Рейтинг@Mail.ru