Я долго думал, и пришёл к выводу, что понятия “Альбом” и “Тэг” в фотогалерее можно совместить.

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

Что есть Альбом и Тэг в классическом понимании?

Альбом - это группа фотографий, имеющих что-то общее. Например, место съёмки (деревня Гадюкино). Или время (1890 год). Или сюжет (закат).

Тэг - это… тоже группа фотографий, имеющих что-то общее (деревня Гадюкино, 1890 год, закат).

В связи с чем и возникла идея об объединении Альбомов и Тэгов  в одну сущность. Зачем? Как обычно, с целью упрощения структуры данных в фотогалерее, упрощения управляющего софта и его отладки, уменьшения количества ошибок.

Что у Альбомов и Тэгов разного?

Альбомы обычно могут быть вложенными (1890 год/деревня Гадюкино (в 1890 году)/закат (в деревне Гадюкино в 1890 году)). Названия у них могут быть неуникальными, если они вложены в разные родительские альбомы. Одна фотография обычно может находиться только в одном альбоме.

Тэги не бывают вложенными. Тэги должны быть уникальными. Одна фотография может не иметь ни одного тэга, может иметь один тэг или много тэгов.

Что я ещё забыл существенного?

После объединения сущностей получается некий ТэгоАльбом, близко соответствующий понятию директории в файловой системе. Фотография при этом соответствует файлу в файловой системе, поддерживающей хардлинки.

Вложенность Альбомов надо сохранить, иначе неудобно. С сохранением древовидной структуры вложенности, иначе получается полный ужас с навигацией.

Зато фотографию можно будет приделывать сразу к нескольким альбомам (хардлинки), за одним исключением: хотя бы в один Альбом фотография должна входить, а то ее найти будет нельзя. Вероятно, придется создать какой-нибудь АльбомПоУмолчанию, в который фотография автоматически попадает, если ее удалить из всех остальных альбомов. Или не создавать, а просто предупреждать пользователя, что при удалении фотографии из последнего её Альбома она будет полностью удалена из системы.

Большой минус получается с уникальностью имён: даже будучи вложенными в разные альбомы, подальбомы должны иметь уникальные имена, иначе их не удастся удобно выводить в Tag Cloud.

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

Вот. Критикуйте.