Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Архитектура БД [3]
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Архитектура БД

Страниц (5): « 1 2 [3] 4 5 »
 

31. vanicon - 28 Июня, 2013 - 19:51:30 - перейти к сообщению
EuGen
Я назвал запрос со слиянием тяжелым, потому что он не будет выполняться с той же скоростью что и обыденные запросы, + при раскидывании базы по серверам эти слияния могут и в значительной степени усложнить это, также в конкретном случае, я не вижу смысла что либо выносить...
Ну вообщем буду иметь ввиду насчет оптимизации путем вынесений полей если что...
32. EuGen - 28 Июня, 2013 - 19:56:13 - перейти к сообщению
vanicon
Ну, я подозреваю, что если будет нужда таким образом разделить хранение БД между серверами, что части будут храниться не полностью на каждом сервере (хотя выглядит как довольно странная схема - проще создать полноценную реплику), то логично предположить, что части одной таблицы будут храниться на одном сервере. Если нет - то вините того, кто таким образом спроектировал БД. Но, думаю, самому себе никто вредить не будет.
33. armancho7777777 - 28 Июня, 2013 - 19:58:13 - перейти к сообщению
vanicon пишет:
Прошу прощение если чем то задел

Проехали )
vanicon пишет:
почему вы утверждали что нужно выносить в другую таблицу какое-то поле

Из-за отсутствия полнотекстового поиска в InnoDB, который превосходит MyISAM во всём за исключением оного + инсерты.
(Добавление)
EuGen пишет:
позволяет выделить удобное время для индексирования, тем самым снизив нагрузку в критичные часы

Я думал подобное реализовать без сторонних библиотек )
34. vanicon - 28 Июня, 2013 - 20:03:06 - перейти к сообщению
armancho7777777 пишет:
Из-за отсутствия полнотекстового поиска в InnoDB, который превосходит MyISAM во всём за исключением оного.

Для поиска я считаю что лучше такие утилиты как сфинкс и т.д, нежели таблица в MyISAM.
Ну а вообще, то мы не в ту сторону идем, спорим о процедурах о полнотекстовых поисках и п.р
А тс нужно лишь простенький блог замутить Радость
35. armancho7777777 - 28 Июня, 2013 - 20:11:24 - перейти к сообщению
vanicon пишет:
А тс нужно лишь простенький блог замутить

Так я всего лишь предположил, зачем можно вынести это поле )
armancho7777777 пишет:
Предположим:
36. Hapson - 28 Июня, 2013 - 20:17:09 - перейти к сообщению
Так ничего и не понял...
Нужно так разбивать или делать большие таблицы для всего.
Статьи, категории, комменты, пользователи...
К чему тогда столько писанины о нормализации?

Да, простенький блог, но базу хочется делать как для чего-то большого, в будущем может быть расширяемого.

А можно вкратце, чем отличаются InnoDB и MyISAM?
37. vanicon - 28 Июня, 2013 - 20:20:28 - перейти к сообщению
Hapson пишет:
А как же нормализация?

Тут главное не слишком нормализировать, потому что все зависит от конкретного приложения, и иногда приходиться денормализацию делать, для повышение производительности.
В вашем же случае, делайте так как будет удобнее работать с данными, а не например делать две таблицы для пользователей (зареганых и не зареганых)...
(Добавление)
Hapson пишет:
А можно вкратце, чем отличаются InnoDB и MyISAM?

В основном блокировками, у первого блокируется только строка при параллельном доступе, а во 2 блокируется вся таблица, поэтому надо использовать InnoDB, а вообще об этом можно и в гугле почитать.
38. Hapson - 28 Июня, 2013 - 20:28:40 - перейти к сообщению
vanicon пишет:
Hapson пишет:
А как же нормализация?

Тут главное не слишком нормализировать, потому что все зависит от конкретного приложения, и иногда приходиться денормализацию делать, для повышение производительности.
В вашем же случае, делайте так как будет удобнее работать с данными, а не например делать две таблицы для пользователей (зареганых и не зареганых)...

Я размышлял следующим образом:

У комментария обязательно есть:
1. его id
2. id статьиб к которой он относится
3. сам коммент
4. его статус

Далее:
1. id пользователя, если он зарегистрирован
2. дальше по id пользователя можно узнать все о нем

Или:
1. имя и email пользователя, если он незарегистрирован... и все

Ну еще есть рейтинг, который тоже может быть а может и нет.

Если все слить, то поля id пользователя, рейтинг, имя и email пользователя где-то будут, а где-то будут пустовать. Вот о чем я.
Я как бы планировал так, чтобы каждая таблица содержала минимум NULL
39. caballero - 28 Июня, 2013 - 20:31:15 - перейти к сообщению
Цитата:
В основном блокировками,

ИМХО основное - это наличие транзакций

Цитата:
К чему тогда столько писанины о нормализации?

потому что писанина - это теория БД и реляционная алгебра. А практика показывает что лишняя нормализация усложняет БД и выборки из нее. В отличие от времен когда разрабатывалась теория реляционных БД сейчас дисковое пространство стоит копейки. Поэтому проще продублировать данные чем перевязывать стопицот таблиц.
40. vanicon - 28 Июня, 2013 - 20:34:07 - перейти к сообщению
Hapson
Я не могу вам однозначно сказать как правильно, но как бы сделал я:
1 таблица комментов, и ничего что кое-где будут пустые мейлы и т.п
А вот насчет рейтинга, это уже другое, если будет просто рейтинг типа кол-во за и против, и не надо будет смотреть кто голосовал, то тоже поместил бы в эту таблицу, а если надо знать кто голосовал, то отдельная таблица, связь один ко многим...
(Добавление)
caballero пишет:
ИМХО основное - это наличие транзакций

да об этом забыл написать, тоже бывает надо....
41. caballero - 28 Июня, 2013 - 20:36:03 - перейти к сообщению
Цитата:
Я как бы планировал так, чтобы каждая таблица содержала минимум NULL

это несущественнно

Цитата:
дальше по id пользователя можно узнать все о нем

зависит от того нужно ли что то узнавать. О незареганом пользователе вы все равно узнать ничего не можете. Возможно и о зареганом ничего кроме емейла и ника ничего в данном конткесте знать не надо (или надо в очень редких случаях).
тогда просто скопировать его емейл и ник в таблицу комента и все дела

это и есть пример денормализации
42. Hapson - 28 Июня, 2013 - 20:39:46 - перейти к сообщению
Вообщем понятно.
Если без деления никак, то делить. А если можно без деления, то не делить.
(Добавление)
caballero пишет:
зависит от того нужно ли что то узнавать. О незареганом пользователе вы все равно узнать ничего не можете. Возможно и о зареганом ничего кроме емейла и ника ничего в данном конткесте знать не надо (или надо в очень редких случаях).
тогда просто скопировать его емейл и ник в таблицу комента и все дела

это и есть пример денормализации

Ну то есть так, таблица комментов:
1. id коммента
2. id статьи
3. id пользователя
4. имя пользователя (незарегистрированного)
5. email пользователя (незарегистрированного)
6. коммент
7. статус

А рейтинг комментов уже отдельно
(Добавление)
А нужно ли делать таблицу с данными незарегистрированных пользователей. Хранить там их емейлы и имена?

И еще такой момент.
Есть таблица с категориями. Есть поле для описания - char(255). Есть 10 строк, но в описаниях NULL. Вот эти NULL будут занимать место на диске?
43. vanicon - 28 Июня, 2013 - 20:50:00 - перейти к сообщению
Hapson пишет:
Ну то есть так, таблица комментов:

Может быть полезно также сделать поле типа кол-во проголосовавших, если надо, что бы не считать по таблице рейтингов, а в таблице рейтингов хранить пользователей конкретно кто проголосовал, но тогда нужно будет при голосовании делать транзакцию, на добавление в таблицу рейтингов и обновления поля в комменте...
44. caballero - 28 Июня, 2013 - 20:54:32 - перейти к сообщению
Цитата:
А нужно ли делать таблицу с данными незарегистрированных пользователей. Хранить там их емейлы и имена?

не нужно

Цитата:
4. имя пользователя (незарегистрированного)
5. email пользователя (незарегистрированного)


всех пользователей
45. Hapson - 28 Июня, 2013 - 20:55:39 - перейти к сообщению
vanicon пишет:
Hapson пишет:
Ну то есть так, таблица комментов:

Может быть полезно также сделать поле типа кол-во проголосовавших, если надо, что бы не считать по таблице рейтингов, а в таблице рейтингов хранить пользователей конкретно кто проголосовал, но тогда нужно будет при голосовании делать транзакцию, на добавление в таблицу рейтингов и обновления поля в комменте...

Касательно моего случая, то нужно что...
Пользователь оставил пост. Кто-то поставил +1 этому посту - у автора поста в профиле поднялся рейтинг. А кто за что голосовал думаю совсем не нужно.
(Добавление)
caballero пишет:
Цитата:
А нужно ли делать таблицу с данными незарегистрированных пользователей. Хранить там их емейлы и имена?

не нужно

Цитата:
4. имя пользователя (незарегистрированного)
5. email пользователя (незарегистрированного)


всех пользователей

Ага,теперь понял. Собственно кроме имени и email больше ничего и не нужно.

 

Powered by ExBB FM 1.0 RC1