Добрый день. Уважаемые гуру MySQL, проконсультируейте пожалуйста. Возник спорный вопрос как лучше хранить данные для оптимальной выборки. Дано. Таблица пользователей. Необходимо. Реализовать рассылку по SMS. Вариант 1. В таблице с пользователями хранить признак того что пользователь может получать SMS. Вариант 2. Создать дополнительную таблицу, в которой будут храниться пользователи которые могут получать SMS.
Во первых, что правильнее в плане архитектуры, а во вторых насколько медленнее будет работать выборка при втором варианте.
Ну хватит стесняться, назовите примерно - тысяча, десять, сто?..
Почему спрашиваю - при взаимодействии с отправителем смс у него обычно бывают лимиты (по разному, от 1000 до 1000000 записей за один запрос).
Какой лимит у вас? Имхо, скорее всего затык будет здесь, а не при выборке из бд.
Например, у сервиса, которым пользуемся мы, цитирую:
"Скорость рассылки - более 2000 SMS в минуту". Это в на порядок меньше, чем мы можем выбрать из бд в секунду
А Я вот не сторонник тянуть такие флаги в основную таблицу....
Взяли новую, со связью 1 к 1 или 1 ко многим.
Перестраивать архитектуру таблицы ради галочки.... А потом их будет 100, 1000
Да и места занимать будет меньше. ИМХО
ну будет 100 галочек - не проблема, когда будет 1000 (а будет ли?) сделать рефакторинг.
А в вашем случае мне придется джойнить 1000 таблиц по ключу????
Илья Зенин: В принципе на этой почве и появились разногласия. Вносить ли флаг привязки в основную таблицу с пользователями или выносить всю связь в отдельную таблицу. По сути не хотелось бы "засорять" таблицу пользователя, скажем так "свойствами", которые не присущи самому пользователю как сущности. Лучше вынести это в отдельную таблицу и там сохранять все эти связи, что я полагаю и имел ввиду пользователь Alex. Но данный вариант будет более рационален если будет реализовываться функционал описанный пользователем Rsa97 , т.е. при множественном варианте различных способов рассылки. По сути тогда нам надо будет всего лишь отфильтровать эту таблицу по необходимому типу рассылки, получить массив ID пользователь и потом уже на основании него сделать выборку из таблицы пользователей. А так в принципе есть это поле будет одно то наверное нет смысле выносить все в отдельную таблицу.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.