Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / БД фотогалереи / 14 сообщений из 14, страница 1 из 1
24.02.2013, 14:41
    #38163695
nirana
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД фотогалереи
Для работы фотогалереи создала следующие таблицы:
fotodivide - id, name ------ таблица разделов
subdivide - id, idFD(поле связи с fotodivide), name --------- таблица подразделов
foto - id, idSD(поле связи с subdivide), dateUP, description, userId, dir(типа int), size(varchar), smallsize(varchar) ---- таблица фото
users - id и т.д. ------ таблица пользователей
tags - id, name ------- таблица тэгов
fototag - idfoto, idtag --------- таблица связи тэгов с изображениями

И вот, запрос на выборку фото, если пользователь выбрал подраздел, выглядел так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT fotodivide.name AS dvName, subdivide.id AS idSD, subdivide.name, fotot.id AS id, fotot.size, fotot.dateUP,
fotot.dir, fotot.smallsize, users.login, tags.id AS idTag, tags.name AS nameTag
FROM 

(SELECT foto.id, idSD, size, dateUP, description, idUser, dir, smallsize FROM foto, subdivide
WHERE foto.`idSD` = subdivide.id AND subdivide.id = " . $x . " ORDER BY id DESC{limit}) AS fotot

LEFT OUTER JOIN fototag ON fotot.id = fototag.`idFoto`
LEFT OUTER JOIN tags ON fototag.idTag = tags.id, fotodivide, subdivide, users
WHERE fotodivide.id = subdivide.idFD AND fotot.`idSD` = subdivide.id AND fotot.idUser = users.id



Затем решила нормализовать базу и начала с таблицы фото, в результате она разраслась еще на несколько:

foto - id, idSD, dateUP, description, idUser
sizes - id, name -------- таблица размеров фото
fotosizes - idfoto, idsize ----- табилца связи фото и полного размера

smallsizes
fotosmallsize - тоже, но для урезанных изображений

dirs - id, dir -------- таблица каталогов, в которых находятся фото
fotodir - idfoto, dirid ------ таблица связей фото и каталогов

Решила проверить скорость выполнения запроса на этой БД, запрос:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SELECT fotodivide.name AS dvName, subdivide.id AS idSD, subdivide.name, fotot.id AS id, fotot.size, fotot.dateUP,
fotot.dir, fotot.smallsize, users.login, tags.id AS idTag, tags.name AS nameTag
FROM 

(SELECT foto.id, idSD, sizes.size, dateUP, description, idUser, dirs.dir, smallsizes.size AS smallsize FROM 
foto, subdivide, sizes, smallsizes, fotosize, fotosmallsize, dirs, fotodir
WHERE 
fotosize.fotoid = foto.id AND fotosize.sizeid = sizes.id AND
fotosmallsize.fotoid = foto.id AND fotosmallsize.sizeid = smallsizes.id AND
fotodir.fotoid = foto.id AND fotodir.dirid = dirs.id AND
foto.`idSD` = subdivide.id AND subdivide.id = 67 ORDER BY id DESC LIMIT 0, 12) AS fotot

LEFT OUTER JOIN fototag ON fotot.id = fototag.`idFoto`
LEFT OUTER JOIN tags ON fototag.idTag = tags.id, fotodivide, subdivide, users
WHERE fotodivide.id = subdivide.idFD AND fotot.`idSD` = subdivide.id AND fotot.idUser = users.id



время выполнения первого запроса ~ 0,0063, второго ~ 0,015

Так вот вопрос: нужно ли делать нормализацию, если после нее скорость работы падает примерно в 2 раза?
p.s. Код запросов приведены намеренно, вдруг дело в них, а не в структуре таблиц
...
Рейтинг: 0 / 0
24.02.2013, 14:44
    #38163699
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД фотогалереи
niranaтаблица размеров фото
А какой смысл у этой таблицы?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.02.2013, 14:46
    #38163702
nirana
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД фотогалереи
Dimitry Sibiryakov,

хранение размеров
...
Рейтинг: 0 / 0
24.02.2013, 14:50
    #38163705
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД фотогалереи
niranaхранение размеров
Для чего?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.02.2013, 14:55
    #38163713
nirana
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД фотогалереи
Dimitry Sibiryakovniranaхранение размеров
Для чего?


для того, чтобы выводить фото в немного уменьшенном виде в правильных пропорциях, или вместо этого каждый раз вызывать функцию getimagesize?
...
Рейтинг: 0 / 0
24.02.2013, 15:40
    #38163743
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД фотогалереи
niranaдля того, чтобы выводить фото в немного уменьшенном виде в правильных
пропорциях, или вместо этого каждый раз вызывать функцию getimagesize?

Пофиг. Зачем на размеры отдельная таблица?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.02.2013, 15:47
    #38163746
nirana
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД фотогалереи
Dimitry SibiryakovПофиг. Зачем на размеры отдельная таблица?

Потому что они повторяются, зачем хранить повторяющиеся значения. Вы бы более конкретно спрашивали сразу
...
Рейтинг: 0 / 0
25.02.2013, 11:33
    #38164364
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД фотогалереи
nirana,
Нормализация делается не для ускорения выборок - т.е. в общем-то в Вашем результате ничего удивительного нет.
С другой стороны, осмысленность приведенной нормализации тоже сомнительна.
Выделить sizes в отдельную таблицу еще можно, если у фото встречается лишь десяток стандартных размеров. Но зачем делать таблицу связей "многоие ко многим"? И все размеры, и "маленькие", и "большие", нужно, конечно, держать в одной таблице.
Смысл же в выделении dirs вообще непонятен.
...
Рейтинг: 0 / 0
25.02.2013, 23:04
    #38165619
nirana
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД фотогалереи
Кот МатроскинНо зачем делать таблицу связей "многоие ко многим"?
Не очень поняла, а как выглядит таблица связей "один к одному"? А про табилцу dirs скажу, что там очень часто повторяются данные, но от нее вообще, конечно, можно отказаться
...
Рейтинг: 0 / 0
26.02.2013, 00:49
    #38165688
guest_20040621
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД фотогалереи
> Смысл же в выделении dirs вообще непонятен.

Смысл как раз понятен: конфигурируемая файловая структура. Но использовать ее следует по-другому:
directory (id, parent_id, ...)
photo (id, directiry_id, ...).

Для размеров отдельная таблица не нужна. Классификация - никак.
...
Рейтинг: 0 / 0
26.02.2013, 11:14
    #38165981
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД фотогалереи
nirana.
Не очень поняла, а как выглядит таблица связей "один к одному"?
("Один ко многим" в данном случае)
Size (IDSize,...)
Photo (IDPhoto, IDSize_norm, IDSize_small,...)

guest_20040621Смысл как раз понятен: конфигурируемая файловая структура
В изначальном варианте в поле dir целое число, никаких конфигурируемых файловых систем. Выделять поле с типом "целое" в отдельную таблицу - имхо не очень осмысленно.
"Что можно добавить к схеме, чтобы было круто" - вопрос интересный, но напрямую к оптимизации схемы не относящийся.
...
Рейтинг: 0 / 0
26.02.2013, 11:26
    #38166013
guest_20040621
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД фотогалереи
> В изначальном варианте в поле dir целое число

Откуда вдруг?
...
Рейтинг: 0 / 0
26.02.2013, 11:44
    #38166056
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД фотогалереи
guest_20040621> В изначальном варианте в поле dir целое число
Откуда вдруг?

nirana Для работы фотогалереи создала следующие таблицы:
fotodivide - id, name ------ таблица разделов
subdivide - id, idFD(поле связи с fotodivide), name --------- таблица подразделов
foto - id, idSD(поле связи с subdivide), dateUP, description, userId, dir(типа int) , size(varchar), smallsize(varchar) ---- таблица фото
users - id и т.д. ------ таблица пользователей
tags - id, name ------- таблица тэгов
fototag - idfoto, idtag --------- таблица связи тэгов с изображениями
...
Рейтинг: 0 / 0
26.02.2013, 12:22
    #38166139
guest_20040621
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД фотогалереи
Полагал, что имелся в виду foreign key. Вы правы.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / БД фотогалереи / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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