powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / База для сайта #2
25 сообщений из 57, страница 2 из 3
База для сайта #2
    #36736634
schizophrenic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
о да! )
...
Рейтинг: 0 / 0
База для сайта #2
    #36740067
schizophrenic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Результат тестирования на 10 000 записей
при выборки из 8 таблиц по внешним ключам!

Делаем выводы!
...
Рейтинг: 0 / 0
База для сайта #2
    #36740213
schizophrenic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тоже самое только без внешних ключей (MYISAM)
...
Рейтинг: 0 / 0
База для сайта #2
    #36740216
schizophrenic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сравнение INNODB и MYISAM
...
Рейтинг: 0 / 0
База для сайта #2
    #36740491
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schizophrenicРезультат тестирования на 10 000 записей
при выборки из 8 таблиц по внешним ключам!

Делаем выводы!Не будет это работать.

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

Простой пример - 2 условия с диапазонами по 2-м атрибутам.
Сервер будет в таких случаях выбирать два списка, подкачивать документы по каждому и мержить. Ну или ещё какой то похожий затратный план.

Пока у вас был единственный нормальный аргумент:
schizophrenicесли у меня будет такое количество записей, то я не буду парится на это счет,
а буду отдыхать на Кенарах ))
Т.е. если реальная эксплуатация системы не планируется, то ваша схема совершенно нормальная.
...
Рейтинг: 0 / 0
База для сайта #2
    #36741069
Кифирчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторРезультат тестирования на 10 000 записей
при выборки из 8 таблиц по внешним ключам!
сам запросик покажите
...
Рейтинг: 0 / 0
База для сайта #2
    #36741326
schizophrenic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кифирчиксам запросик покажите
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
USE BASE;

DELIMITER $$

DROP PROCEDURE IF EXISTS getDocument$$

CREATE PROCEDURE getDocument(IN setName CHAR( 32 ))
SQL SECURITY INVOKER
BEGIN
	SELECT
		Page.Value AS Page,
		Descriptions.Value AS Description,
		Keywords.Value AS Keyword,
		Titles.Value AS Title,
		Bodys.Value AS Body,
		Created.Value AS Created,
		Changed.Value AS Changed,
		Name.Value AS Name,
		Surname.Value AS Surname,
		Nickname.Value AS Nickname
	FROM
		BASE.Documents
		LEFT OUTER JOIN BASE.Names Page
			ON Documents.ID_Name = Page.ID
		LEFT OUTER JOIN BASE.Descriptions
			ON Documents.ID_Description = Descriptions.ID
		LEFT OUTER JOIN BASE.Keywords
			ON Documents.ID_Keyword = Keywords.ID
		LEFT OUTER JOIN BASE.Titles
			ON Documents.ID_Title = Titles.ID
		LEFT OUTER JOIN BASE.Bodys
			ON Documents.ID_Body = Bodys.ID
		LEFT OUTER JOIN BASE.Attributes
			ON Documents.ID_Attribute = Attributes.ID
		LEFT OUTER JOIN BASE.Dates Created
			ON Documents.ID_Created = Created.ID
		LEFT OUTER JOIN BASE.Dates Changed
			ON Documents.ID_Changed = Changed.ID
		LEFT OUTER JOIN BASE.Authors Author
			ON Documents.ID_Author = Author.ID
		LEFT OUTER JOIN BASE.Names Name
			ON Author.ID_Name = Name.ID
		LEFT OUTER JOIN BASE.Names Surname
			ON Author.ID_Surname = Surname.ID
		LEFT OUTER JOIN BASE.Names Nickname
			ON Author.ID_Nickname = Nickname.ID
	WHERE
		Page.Value = setName AND
		Attributes.Value = 'visible';
END
$$

DROP PROCEDURE IF EXISTS setDocument$$

CREATE PROCEDURE setDocument(IN Name VARCHAR( 32 ), IN Parent VARCHAR( 32 ),
	IN Description VARCHAR( 128 ), IN Keyword VARCHAR( 128 ), IN Title VARCHAR( 64 ),
	IN Body MEDIUMTEXT, IN Author VARCHAR( 32 ))
SQL SECURITY INVOKER
BEGIN
	IF NOT (SELECT Value FROM Names WHERE Value = Name) <=> Name
	AND (SELECT Value FROM Names WHERE Value = Parent) = Parent 
	AND (SELECT Value FROM Names WHERE Value = Author) = Author THEN

		INSERT INTO Names (ID, Value) VALUES (NULL, Name);

		IF NOT (SELECT Value FROM Descriptions WHERE Value = Description) <=> Description THEN
			INSERT INTO Descriptions (ID, Value) VALUES (NULL, Description);
		END IF;

		IF NOT (SELECT Value FROM Keywords WHERE Value = Keyword) <=> Keyword THEN
			INSERT INTO Keywords (ID, Value) VALUES (NULL, Keyword);
		END IF;

		IF NOT (SELECT Value FROM Titles WHERE Value = Title) <=> Title THEN
			INSERT INTO Titles (ID, Value) VALUES (NULL, Title);
		END IF;

		IF NOT (SELECT Value FROM Bodys WHERE Value = Body) <=> Body THEN
			INSERT INTO Bodys (ID, Value) VALUES (NULL, Body);
		END IF;

		IF NOT (SELECT Value FROM BASE.Dates WHERE Value = CURDATE()) <=> CURDATE() THEN
			INSERT INTO Dates (ID, Value) VALUES (NULL, CURDATE());
		END IF;

		SET @ID_Parent = (SELECT ID FROM Names WHERE Value = Parent);
		SET @ID_Name = (SELECT ID FROM Names WHERE Value = Name);
		SET @ID_Description = (SELECT ID FROM Descriptions WHERE Value = Description);
		SET @ID_Keyword = (SELECT ID FROM Keywords WHERE Value = Keyword);
		SET @ID_Title = (SELECT ID FROM Titles WHERE Value = Title);
		SET @ID_Body = (SELECT ID FROM Bodys WHERE Value = Body);
		SET @ID_Date = (SELECT ID FROM Dates WHERE Value = CURDATE());
		SET @ID_Author = (SELECT Authors.ID FROM BASE.Names LEFT OUTER JOIN
		BASE.Authors ON Authors.ID_Nickname = Names.ID WHERE Names.Value = Author);
		
		INSERT INTO Documents (ID, PID, ID_Name, ID_Description, ID_Keyword,
		ID_Title, ID_Body, ID_Attribute, ID_Created, ID_Changed, ID_Author)
		VALUES (NULL, @ID_Parent, @ID_Name, @ID_Description, @ID_Keyword,
		@ID_Title, @ID_Body, '1', @ID_Date, '2', @ID_Author);
		
	END IF;
END
$$

DELIMITER ;

CALL setDocument(
	'Test',	 -- Name
	'help',	 -- Parent
	'Test',	 -- Description
	'Test',	 -- Keyword
	'Test',	 -- Title
	'Test',	 -- Body
	'user1'); -- Author

CALL BASE.getDocument('Test');
...
Рейтинг: 0 / 0
База для сайта #2
    #36741748
Кифирчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schizophrenic,
любопытно, почему вы как "идентификатор" документа используете строку?

при тестировании, вы забили базу 10тыс доками и дергали по очереди setDocument и getDocument?
если так, то это ваще не показатель.

как я понимаю база с документами - для сайта, попробуем предположить какие могут быть запросы
1. Выбрать все статьи (заголовок, автор, описание) относящиеся к некоторому разделу за 2010й год(или которые были изменены в 2010м), с обратной сортировкой по дате. я что-то не понял где это у вас, предположим Attributes, и не забудем про пэйджинг. и для разнообразия добавьте LIKE
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select
...
where ID_Attribute =  4 
and year(Created.Value)= 2010 
and Titles.Value like '%air%'
...
order by Created.Value DESC
LIMIT  250 , 500 

ещё, обычно можно сортировать списки, по дате, автору, названию
повторите тот же запрос только с order by Titles.Value
потом order by Name.Value


2. Вывести список авторов, и количество статей, которые они написали за июнь 2010?
(примерно)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select autors.name, a.val
from Authors
left outer join
(
  select Documents.author_id, count(*) as val 
  from Documents 
  left join Dates Created on Documents.ID_Created = Created.ID
  where year(Creater.value) =  2010 
  and month(Creater.value) =  6 
  group by Documents.author_id
) as a on Authors.author_id = a.author_id


вот, два этих запроса погоняйте, и покажите как они у вас летают
...
Рейтинг: 0 / 0
База для сайта #2
    #36741796
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кифирчик, не мечите бисер... У меня после взгляда на сетдокумент() вообще создалось впечатление, что это Джерик прочитал наконец-то чего-то по эскуэлю и выполз на форум под новым ником.
...
Рейтинг: 0 / 0
База для сайта #2
    #36742237
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schizophrenic
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
............................
	FROM
		BASE.Documents
		LEFT OUTER JOIN BASE.Names Page
			ON Documents.ID_Name = Page.ID
		LEFT OUTER JOIN BASE.Descriptions
			ON Documents.ID_Description = Descriptions.ID
		LEFT OUTER JOIN BASE.Keywords
			ON Documents.ID_Keyword = Keywords.ID
		LEFT OUTER JOIN BASE.Titles
			ON Documents.ID_Title = Titles.ID
		LEFT OUTER JOIN BASE.Bodys
			ON Documents.ID_Body = Bodys.ID
		LEFT OUTER JOIN BASE.Attributes
			ON Documents.ID_Attribute = Attributes.ID
		LEFT OUTER JOIN BASE.Dates Created
			ON Documents.ID_Created = Created.ID
		LEFT OUTER JOIN BASE.Dates Changed
			ON Documents.ID_Changed = Changed.ID
		LEFT OUTER JOIN BASE.Authors Author
			ON Documents.ID_Author = Author.ID
		LEFT OUTER JOIN BASE.Names Name
			ON Author.ID_Name = Name.ID
		LEFT OUTER JOIN BASE.Names Surname
			ON Author.ID_Surname = Surname.ID
		LEFT OUTER JOIN BASE.Names Nickname
			ON Author.ID_Nickname = Nickname.ID
	WHERE
		Page.Value = setName AND
		Attributes.Value = 'visible';

На правах оффтопа. А у Вас действительно все связи между таблицами необязательные? Я имею ввиду LEFT OUTER JOIN. Уж соединение с BASE.Page и BASE.Attributes точно должно быть INNER JOIN'ом просто в силу условий во WHERE.
tanglirКифирчик, не мечите бисер... У меня после взгляда на сетдокумент() вообще создалось впечатление, что это Джерик прочитал наконец-то чего-то по эскуэлю и выполз на форум под новым ником.Не он. Их роднит только то, что оба считают чрезвыйчайно веселым уверенно нести чепуху. :)
...
Рейтинг: 0 / 0
База для сайта #2
    #36743591
rmka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
присоединяюсь, работа с такой структурой геморой ещё тот,
1. вместо одного инсерта на сделать последовательно 1..n инсертов (по колву атрибутов документа), получить их id (ещё вопрос скорости получения этих id). Время вставки грубо говоря увеличивается в 1..n раз. Таже песня с апдейтом.
2. увелечение сложности объёма кода (выборка, вставка, изменение, удаление (каскадное надо организовывать как-то)) в n раз.
3. Никакой пользы акромя вреда.
Работать то она конечно будет, и на сайте не так много данных и я конечно понимаю, если можно сделать сложно, зачем делать просто? :)
...
Рейтинг: 0 / 0
База для сайта #2
    #36743681
schizophrenic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rmka,

ну почему сразу геморрой!
предположим мне необходимо организовать поиск по сайту (расширенный)
Код: plaintext
1.
2.
     - поиск по заголовку
     - поиск в теле
     - поиск по дате

Что я делаю, я тупа ищу заголовок в таблице Titles
тело в Bodys и даты в Dates

То есть я просто беру ID совпадений и начинаю искать и сравнивать
с таблицей Documents

в чем геморрой? в сложности сравнения ID? или в том что нужно подготовить ряд грамотных процедур?

по вашему если зарегистрировано тысяча Ивановых или Петровых
значит нужна таблица типа:

ID Nickname Name Surname1 User1 ВасяИванов2 User2 ДимаИванов3 User3КоляИванов4 User4ПетяИванов5 User5ГришаИванов6 User6ПетяИванов7 User7ГогиИванов8 User8ГогиПетров

а может правильнее:

Users (Nickname - уникальные)
ID Nickname Name Surname1 User1 112 User2 213 User3314 User4415 User5516 User6417 User7618 User862
Names (Value- уникальные)
ID Value1 Вася2 Дима3 Коля4 Петя5 Гриша6 Гоги
Surnames (Value- уникальные)
ID Value1 Иванов2 Петров
Что так сложно ID сравнивать или это лень процедуры собирать?
...
Рейтинг: 0 / 0
База для сайта #2
    #36743690
schizophrenic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вот тут и возникла мысль совместить Names и Surnames
да еще и кинуть туда все Nickname, ведь все выше упомянутые уникальные

вот и получилось:
...
Рейтинг: 0 / 0
База для сайта #2
    #36743711
schizophrenic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rmka,

так что 1НФ глупо, 2НФ хорошо и грамотно!
но я все же остановился на 3НФ

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

я не иду по принципу 2НФ (это видимо Ваш предел) я иду дальше
...
Рейтинг: 0 / 0
База для сайта #2
    #36743725
schizophrenic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Senya_LА у Вас действительно все связи между таблицами необязательные?действительно!!!
...
Рейтинг: 0 / 0
База для сайта #2
    #36743728
rmka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
с таким подходом можно нормализовать все текстовые поля, ведь там может встречаться очень много одинаковых слов, к примеру сделать справочник слов, чтобы не городить широкую таблицу можно её транспонировать, заменить все слова на id и будет просто супер, а потом можно ещё даты разделять и хранить отдельно дни/месяцы/годы в принципе можно и со временем так поступить :) а ещё можно слова разделить они ведь состоят из отдельных букв.... какое широкое поле деятельности :)
...
Рейтинг: 0 / 0
База для сайта #2
    #36743736
schizophrenic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rmka,

вы Язвите! а то сути я прав, просто народ боится такой правды,
с такой архитектурой действительно сложно работать...

но все таки я прав, так ведь грамотнее? скажите?
...
Рейтинг: 0 / 0
База для сайта #2
    #36743739
rmka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
просто демагогия, все минусы были описаны, а плюсов просто нет. Грамотно постореная БД это оптимальный баланс между нормализацией и денормализацией.
...
Рейтинг: 0 / 0
База для сайта #2
    #36743743
rmka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
по вашему правда это только нормализация... к сожалению это не так...
...
Рейтинг: 0 / 0
База для сайта #2
    #36743749
schizophrenic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rmkaГрамотно построенная БД это оптимальный баланс между нормализацией и денормализациейсогласен но обстоятельно, исходи из поставленной задачи, такая структура наиболее бифуркационна..

что касаемо доводов их не было, были сомнения относительно выборки,
но это не довод
...
Рейтинг: 0 / 0
База для сайта #2
    #36743753
schizophrenic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rmkaпо вашему правда это только нормализацияда! да и еще раз да! Докажите обратное!
...
Рейтинг: 0 / 0
База для сайта #2
    #36743760
schizophrenic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rmka,

нормализация основа любого проектирования, наименьшее сопротивление, минимализм в конце концов! Вы вообще о чем?

структурирование данных это составляющая процесса нормализации!
...
Рейтинг: 0 / 0
База для сайта #2
    #36743816
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schizophrenicrmkaпо вашему правда это только нормализацияда! да и еще раз да! Докажите обратное!Делайте как нравится. Переубеждать Вас никто не собирается .
...
Рейтинг: 0 / 0
База для сайта #2
    #36743834
schizophrenic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тема закрыта!
...
Рейтинг: 0 / 0
База для сайта #2
    #36743896
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schizophrenicrmka,

нормализация основа любого проектирования, наименьшее сопротивление, минимализм в конце концов! Вы вообще о чем?

структурирование данных это составляющая процесса нормализации!Основа любого проектирования - достижение цели проекта.

Нормализация - это не цель проекта, а средство, методология, ...

Вот и применяйте нормализацию целей добра :-)

Вы вот в записной книжке фамилии-имена по простому пишете, словами, или у вас есть отдельные странички с фамилиями и именами, а персоны записываете ссылками? 23|44|211 - Это Иванов Пётр Николаевич :-)
...
Рейтинг: 0 / 0
25 сообщений из 57, страница 2 из 3
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / База для сайта #2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]