|
Не могу придумать структуру БД
|
|||
---|---|---|---|
#18+
Задача примерно такая: Придумать структуру для каталогизатора допустим фотографий. Есть простая таблица со ссылками на файлы фотографий. Пользователь может добавлять неограниченное количество собственных фильтров (тегов). У каждого из фильтров может быть задано произвольное число предопределенных значений. К примеру: Фильтр "Место съемки". Значения "Москва", "Тамбов", "Мухосранск" Фильтр "Время съемки". Значения "Утром", "Днем", "Вечером" ВАЖНО! Для одной фотографии не может быть задано более одного значения одного фильтра. Т.е. у Фото1 не может соответствовать два разных значения фильтра(тега) "Место съмки" - "Москва" и "Мухосранск". Вроде задача несложная. Но оптимальную структуру БД придумать не могу. Допустим так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Здесь у меня не фотографии, а некие "cards". Но роли не играет. Линковочная таблица cardsfiltresvalues мне не нравится. По идее, колонка "filter" не нужна. Ибо у значения колонки "filtervalue" уже есть родительский элемент и его можно получить. Но если её убрать - как добиться уникальности UNIQUE([card], [filter])? А с ней - нет гарантии что родительский элемент значения "filtervalue" будет совпадать с значением колонки "filter". А должен обязательно... Что я делаю не так? Тип СУБД не очень важен. Мне важно понять - как решается такая задача. Ведь не я ж первый её решаю, явно. Спасибо за помощь! ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2017, 13:08 |
|
Не могу придумать структуру БД
|
|||
---|---|---|---|
#18+
stoiВАЖНО! Для одной фотографии не может быть задано более одного значения одного фильтра. На практике - не факт Тема: животные/юмор Участники: Родственники/коллеги Вполне может существовать несколько значений в одном теге. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2017, 13:11 |
|
Не могу придумать структуру БД
|
|||
---|---|---|---|
#18+
авторВполне может существовать несколько значений в одном теге. Да. Но задача взята для примера. Там не фотографии в реальности. И нужно именно ОДНО значение. Вот это всё и портит )) Ну или я туплю... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2017, 13:14 |
|
Не могу придумать структуру БД
|
|||
---|---|---|---|
#18+
Да нет, наоборот облегчает. Непонятен подход к проектирования структуры БД. Это явно не делается через скрипты её создания. + Отсутствуют ID поля. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2017, 14:18 |
|
Не могу придумать структуру БД
|
|||
---|---|---|---|
#18+
982183, Да бог с ним с подходом ) Дался он вам! Признаюсь, я не дока в проектировании БД. Просто набросал в SQLite Expert БД, а сюда выложил ddl. Еще на бумажке диаграммы рисовал. Но их выложить сложнее ). У вас по сути вопроса есть какие-нибудь предложения? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2017, 14:26 |
|
Не могу придумать структуру БД
|
|||
---|---|---|---|
#18+
Много буков почистил, добавил ID, осталось добавить комменты, а потом можно думать [cards].[id] [cards].[front] [cards].[back] [cardsfiltresvalues]. [card_id] [cardsfiltresvalues]. [filtervalue] [cardsfiltresvalues]. [filter] [filtres].[id] [filtres].[name] [filtresvalues] .[ filtres id] [filtresvalues] .[cardsfiltresvalues_id] [filtresvalues]. [value] Не вижу справочника "тегов" ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2017, 14:28 |
|
Не могу придумать структуру БД
|
|||
---|---|---|---|
#18+
982183, Применительно к фотографиям, будет так: [photos].[id] [photos].[path] [photostagsvalues]. [photo_id] [photostagsvalues]. [tags_id] [photostagsvalues]. [tagsvalues_id] [tags].[id] [tags].[name] [tagsvalues] .[id] [tagsvalues] .[tags_id] [tagsvalues]. [value] ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2017, 14:49 |
|
Не могу придумать структуру БД
|
|||
---|---|---|---|
#18+
А еще лучше так (изменил порядок таблиц): [photos].[id] [photos].[path] [tags].[id] [tags].[name] [tagsvalues] .[id] [tagsvalues] .[tags_id] [tagsvalues]. [value] [photostagsvalues]. [photo_id] [photostagsvalues]. [tags_id] [photostagsvalues]. [tagsvalues_id] Ключевая таблица - последняя. Она связывает фотографии со значениями тэгов. Можно удалить лишнее поле tags_id и получится: [photostagsvalues]. [photo_id] [photostagsvalues]. [tagsvalues_id] И всё б хорошо, но тогда не получится обеспечить уникальность пар photo_id <-> tags_id ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2017, 14:54 |
|
Не могу придумать структуру БД
|
|||
---|---|---|---|
#18+
А ты хочешь это сделать на уровне БД? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2017, 15:10 |
|
Не могу придумать структуру БД
|
|||
---|---|---|---|
#18+
Хранить по второму варианту может быть и правильнее, Но всё равно при вводе сначала надо выбрать тэг, потом его значение. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2017, 15:14 |
|
Не могу придумать структуру БД
|
|||
---|---|---|---|
#18+
982183, Я не знаю - можно ли сделать это на уровне БД. Потому и спрашиваю у профессионалов ) Любопытно - решаемо ли это на уровне БД? авторХранить по второму варианту может быть и правильнее, Но всё равно при вводе сначала надо выбрать тэг, потом его значение. Тогда уникальность нужно контролировать при вводе данных. Каждый раз придется делать выборку. Неоптимально. В первом варианте есть лишнее поле. Но зато при вводе ничего проверять не нужно. ИМХО - это более правильно. Тем более - БД будет не сильно большая, одно лишнее поле - не утянет Модератор: Тема перенесена из форума "SQLite". ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2017, 16:13 |
|
Не могу придумать структуру БД
|
|||
---|---|---|---|
#18+
У Вас что-то непонятное с ключами - например, что является ключом в cards? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2017, 18:04 |
|
Не могу придумать структуру БД
|
|||
---|---|---|---|
#18+
Посмотрел на более позднюю структуру 20741547 Почему бы Вам в tagvalues не сделать ключом (tag_id, value) и соответственно ссылаться на этот ключ из photostagsvalues? Таким образом ссылочная целостность не даст ввести в photostagsvalues значение tag_id, не соответствующее значению фильтра. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2017, 18:30 |
|
Не могу придумать структуру БД
|
|||
---|---|---|---|
#18+
stoi, значения фильтров могут только браться из общего справочника или пользователь может ввести произвольный? Скажем, в базе хранится, что Место съемки может быть "Москва", "Тамбов", "Мухосранск". Пользователь хочет ввести "Пенза". Разрешаем ему это и записываем в базу или посылаем куда подальше? Если разрешаем и записываем Пензу, то для следующей фотографии мы на выбор даём "Москва", "Тамбов", "Мухосранск", "Пенза" или только то, что было изначально? т.е. Пенза запишется к конкретной фотографии или нужно её положить в общую таблицу? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2017, 20:23 |
|
Не могу придумать структуру БД
|
|||
---|---|---|---|
#18+
А почему бы нет? Но это не вопрос к структуре БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2017, 02:35 |
|
Не могу придумать структуру БД
|
|||
---|---|---|---|
#18+
Друг прислал диаграмму (в прикреплении). Говорит - нашел решение. Но из диаграммы непонятно - как создаются ключи ( ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2017, 10:19 |
|
Не могу придумать структуру БД
|
|||
---|---|---|---|
#18+
Сам себе отвечу. Друг решил задачку. Респект ему. Я пошел читать про внешние составные ключи... Код: plsql 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2017, 11:21 |
|
Не могу придумать структуру БД
|
|||
---|---|---|---|
#18+
stoiСам себе отвечу. Друг решил задачку. Респект ему. Я пошел читать про внешние составные ключи... 20742255 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2017, 11:53 |
|
|
start [/forum/topic.php?fid=32&fpage=10&tid=1540142]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
80ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 237ms |
total: | 419ms |
0 / 0 |