powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / БД фотогалереи
14 сообщений из 14, страница 1 из 1
БД фотогалереи
    #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
БД фотогалереи
    #38163699
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
niranaтаблица размеров фото
А какой смысл у этой таблицы?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
БД фотогалереи
    #38163702
nirana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

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


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

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

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

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

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

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

Откуда вдруг?
...
Рейтинг: 0 / 0
БД фотогалереи
    #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
БД фотогалереи
    #38166139
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Полагал, что имелся в виду foreign key. Вы правы.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / БД фотогалереи
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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