powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Реализация "избранного" в БД
25 сообщений из 25, страница 1 из 1
Реализация "избранного" в БД
    #37462259
beef
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

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

А вопрос у меня в том, кто как её реализует и как, на ваш взгляд, правильнее. Предлагаю свой вариант, просьба оценить.

Предположим, есть сущности:
- пользователь
- статья
- товар

Я создаю сущность "Избранное", включающую в себя поля:
- тип избранного (0 - для статей, 1 - для товаров, возможно 2, 3, 4, ... - для других категорий избранного)
- ID-избранного (в зависимости от значения поля "тип избранного", здесь будет либо ID-статьи, либо ID-товара)
- ID-пользователя (добавившего статью или товар к себе избранное)

Мне в этом решении не очень нравится использования поля "тип избранного" (такое как бы "физическое" кодирование категорий избранного, не знаю как объяснить..). Либо может быть создавать ещё справочник категорий всего, что есть на сайте (включая "статьи" и "товары") и вместо поля "тип избранного" будет поле "ID-категории".

В общем, жду ваших соображений)
...
Рейтинг: 0 / 0
Реализация "избранного" в БД
    #37462306
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beefМне в этом решении не очень нравится использования поля "тип избранного" (такое как бы "физическое" кодирование категорий избранного, не знаю как объяснить..). Либо может быть создавать ещё справочник категорий всего, что есть на сайте (включая "статьи" и "товары") и вместо поля "тип избранного" будет поле "ID-категории".Справочник - это само собой.

Без справочника можно обойтись разве что для битового поля, и то, если его понятно назвать :-)

Не очень хорошо, что "в зависимости от значения поля "тип избранного", здесь будет либо ID-статьи, либо ID-товара" - целостность трудно поддерживать, но тут уж по разному делают - либо забивают на поддержку целостности базой, либо делают сквозные уникальные ИД, либо поддерживают триггерами, либо включением поля "тип избранного" в другие таблицы...
...
Рейтинг: 0 / 0
Реализация "избранного" в БД
    #37462514
beef
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot alexeyvg]beefНе очень хорошо, что "в зависимости от значения поля "тип избранного", здесь будет либо ID-статьи, либо ID-товара" - целостность трудно поддерживать

Вот об этом я не подумал. А какие могут быть, например, проблемы с целостностью?
...
Рейтинг: 0 / 0
Реализация "избранного" в БД
    #37462564
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beefalexeyvgНе очень хорошо, что "в зависимости от значения поля "тип избранного", здесь будет либо ID-статьи, либо ID-товара" - целостность трудно поддерживать

Вот об этом я не подумал. А какие могут быть, например, проблемы с целостностью? В смысле поменяет кто то "тип избранного", или сразу засунет в базу

тип избранного 0 - для статей, ID-избранного - ID-товара)

Только не надо говорить, что уж у вас-то в базе будут только правильные значения :-)

Лучьше, чтобы база поддерживала целостность сама (хотя как я говорил, иногда и забивают - в конце концов, избранное не такая уж важная вещь).
...
Рейтинг: 0 / 0
Реализация "избранного" в БД
    #37462600
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему бы не завести отдельные таблички на каждый тип избранного? Это решит проблему с
целостностью.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Реализация "избранного" в БД
    #37462648
SignOff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Можно хранить тип xml - и не парится :)
...
Рейтинг: 0 / 0
Реализация "избранного" в БД
    #37462709
beef
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvgbeefпропущено...


Вот об этом я не подумал. А какие могут быть, например, проблемы с целостностью? В смысле поменяет кто то "тип избранного", или сразу засунет в базу

тип избранного 0 - для статей, ID-избранного - ID-товара)

Только не надо говорить, что уж у вас-то в базе будут только правильные значения :-)

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

Понял.. наверно я всё-таки предпочту забить в этом случае на целостность) Спасибо за ответы.
...
Рейтинг: 0 / 0
Реализация "избранного" в БД
    #37462711
beef
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovА почему бы не завести отдельные таблички на каждый тип избранного? Это решит проблему с
целостностью.

Не.. не наш метод) Вы сами то так делаете?)
...
Рейтинг: 0 / 0
Реализация "избранного" в БД
    #37462717
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beefВы сами то так делаете?)
Да. Если уж разнёс сущности, то и избранные из них тоже надо разнести.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Реализация "избранного" в БД
    #37462768
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovbeefВы сами то так делаете?)
Да. Если уж разнёс сущности, то и избранные из них тоже надо разнести. Сомневаюсь, что это правильно.

Избранное - это одна бизнес-сущность. У неё есть набор атрибутов, есть выполняемые над ней действия, какая то бизнес-логика...
Зачем же разносить записи этой сущности в несколько таблиц?
...
Рейтинг: 0 / 0
Реализация "избранного" в БД
    #37462807
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgИзбранное - это одна бизнес-сущность.
Ничуть. Это разные сущности: "избранные статьи", "избранные товары" и т.д. У них могут
быть разные наборы атрибутов и выборки по ним никогда не пересекаются.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Реализация "избранного" в БД
    #37462824
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovalexeyvgИзбранное - это одна бизнес-сущность.
Ничуть. Это разные сущности: "избранные статьи", "избранные товары" и т.д. У них могут
быть разные наборы атрибутов и выборки по ним никогда не пересекаются. Мы очевидно говорим о случае, когда это одна бизнес-сущность, т.е. пользователи рассматривают её как нечто неделимое, целостное. Описывают поведение, интерфейсы, отчёты, действия над неким объектом.
...
Рейтинг: 0 / 0
Реализация "избранного" в БД
    #37462839
beef
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvgDimitry Sibiryakovпропущено...

Ничуть. Это разные сущности: "избранные статьи", "избранные товары" и т.д. У них могут
быть разные наборы атрибутов и выборки по ним никогда не пересекаются. Мы очевидно говорим о случае, когда это одна бизнес-сущность, т.е. пользователи рассматривают её как нечто неделимое, целостное. Описывают поведение, интерфейсы, отчёты, действия над неким объектом.
Да, согласен. Я совершенно точно представляю "избранное", как одну бизнес-сущность.
...
Рейтинг: 0 / 0
Реализация "избранного" в БД
    #37462847
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beefЯ совершенно точно представляю "избранное", как одну бизнес-сущность.

И в интерфейсе Вы представляете "избранное" пользователя как неструктурированный склад
ссылок?..
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Реализация "избранного" в БД
    #37462868
beef
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovbeefЯ совершенно точно представляю "избранное", как одну бизнес-сущность.

И в интерфейсе Вы представляете "избранное" пользователя как неструктурированный склад
ссылок?..

В интерфейсе же можно как угодно структурировать избранное по категориям. Здесь я проблем не вижу.
...
Рейтинг: 0 / 0
Реализация "избранного" в БД
    #37462883
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beefЗдесь я проблем не вижу.
Покажите запросы, которыми Вы будете доставать информацию для формирования интерфейса.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Реализация "избранного" в БД
    #37463150
beef
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovbeefЗдесь я проблем не вижу.
Покажите запросы, которыми Вы будете доставать информацию для формирования интерфейса.

Например, так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT 
  a.*
FROM
  tbl_articles a,
  tbl_favour f
WHERE
  f.favour_type =  3  AND 
  f.user_id =  4  AND 
  f.target_id = a.id

Выбираю все избранные статьи (код статьи в избранном - 3) для заданного юзера (user_id = 4).
...
Рейтинг: 0 / 0
Реализация "избранного" в БД
    #37463165
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beefВыбираю все избранные статьи
Вот видите, Вы тут же рефлекторно ввели сущность "избранные статьи"...
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Реализация "избранного" в БД
    #37463212
beef
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovbeefВыбираю все избранные статьи
Вот видите, Вы тут же рефлекторно ввели сущность "избранные статьи"...

Хм) Может Вы и правы..
На самом деле, я ведь не представляю ситуации, когда придётся работать со всем избранным (статьи, товары) единообразно. То есть вряд ли придётся выбирать и обрабатывать одновременно все типы избранного. Где-то нужны только избранные статьи, а где-то - только избранные товары, но никогда - одновременно и то, и другое.
...
Рейтинг: 0 / 0
Реализация "избранного" в БД
    #37463811
Dimitry SibiryakovНичуть. Это разные сущности: "избранные статьи", "избранные товары" и т.д. У них могут
быть разные наборы атрибутов и выборки по ним никогда не пересекаются.
Dimitry SibiryakovbeefВыбираю все избранные статьи
Вот видите, Вы тут же рефлекторно ввели сущность "избранные статьи"...

за уши притянуто. избранное - это свалка (id, смысл id, user id).
какие еще "разные наборы атрибутов"? разные атрибуты в свои таблицы уже давно разложены.
...
Рейтинг: 0 / 0
Реализация "избранного" в БД
    #37463836
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фавор такой фаворизбранное - это свалка (id, смысл id, user id).
Вот и покажите, как Вы на эту свалку
а) наложите FK на сущности
б) выберете несколько избранных сущностей для показа в интерфейсе
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Реализация "избранного" в БД
    #37464111
Dimitry Sibiryakovфавор такой фаворизбранное - это свалка (id, смысл id, user id).
Вот и покажите, как Вы на эту свалку
а) наложите FK на сущности
б) выберете несколько избранных сущностей для показа в интерфейсе

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

по пункту [занудо] Б) [/занудо]:
Код: plaintext
select ... from ...
язык программирования - SQL.
...
Рейтинг: 0 / 0
Реализация "избранного" в БД
    #37464831
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 30.09.2011 10:35, beef wrote:
> А вопрос у меня в том, кто как её реализует и как, на ваш взгляд, правильнее.

У нас объектная БД (храним объекты), поэтому у нас проще,
пользователь, --> избранные объекты.
Без обобщения всех сущностей в объекты по-хорошему это и не сделать,
надо делать по одной таблице избранного на каждую сущность БД,
которая может быть в избранном.


> Я создаю сущность "Избранное", включающую в себя поля:
> - тип избранного (0 - для статей, 1 - для товаров, возможно 2, 3, 4, ... - для
> других категорий избранного)
> - ID-избранного (в зависимости от значения поля "тип избранного", здесь будет
> либо ID-статьи, либо ID-товара)

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

Поэтому тебе уже придётся унифицировать типы идентификаторов всех сущностей.
А тут уже до объектов один шаг.


> Мне в этом решении не очень нравится использования поля "тип избранного" (такое
> как бы "физическое" кодирование категорий избранного, не знаю как объяснить..).

Это нормально, были бы объекты у тебя, то у тебя был бы класс объекта в таблице
объектов. А тут тебе необходимо как-то отбирать записи, которые представляют
ссылки на определённые сущности.

Попробуй кстати написать запрос "вывести все записи из избранного",
будет очень весело, тебе придётся перечислять все таблицы, которые потенциально
могут быть в избранном.

> Либо может быть создавать ещё справочник категорий всего, что есть на сайте
> (включая "статьи" и "товары") и вместо поля "тип избранного" будет поле
> "ID-категории".

Ну, т.е. класс объекта.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Реализация "избранного" в БД
    #37464921
beef
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Убедили, спасибо) В итоге принял решение делать отдельные сущности избранного для каждой сущности, которую можно добавить в избранное. Т.е. теперь у меня есть сущности "избранные статьи", "избранные товары" и т.д.
...
Рейтинг: 0 / 0
Реализация "избранного" в БД
    #37470063
beefУбедили, спасибо) В итоге принял решение делать отдельные сущности избранного для каждой сущности, которую можно добавить в избранное. Т.е. теперь у меня есть сущности "избранные статьи", "избранные товары" и т.д.
фигли, нет архитектора - можно и так.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Реализация "избранного" в БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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