В таблице users 100 000 строк, в таблице user_profiles — ровно одна строка на каждого user_id. Вы делаете INNER JOIN по user_id. Что верно про число строк результата?
AОно не может быть больше 100 000; при
one-to-one cardinality INNER JOIN может только уменьшить строки, если есть пропускиBВсегда будет ровно 100 000 строк, потому что это
one-to-oneCМожет вырасти до 100 000 * 100 000 из-за
join explosionDСтанет равно числу колонок в
user_profilesПравильный ответ.
one-to-one cardinality не размножает строки, а INNER JOIN может только отбросить несовпавшие ключи.Разбор
При one-to-one на каждый user_id с каждой стороны есть максимум одна строка, поэтому множителя нет. INNER JOIN вернёт только пары, где ключ есть в обеих таблицах. Если часть пользователей без профиля, строки уменьшатся; если профили есть для всех, получится 100 000.
Проверь себя · 1/3разбор после ответа
Вы хотите добавить к
orders атрибут category из таблицы products(product_id, category) и не изменить количество строк заказов. Что важнее всего проверить про products, чтобы избежать duplication?Ещё вопросы по теме «JOIN и кардинальность»
- Вы соединяете `users` и `orders` по `user_id`, где у пользователя может быть много заказов (`one-to-many`). Как посчитать число пользователей, которые сделали хотя бы один заказ, чтобы избежать `duplication`?
- Для одного `order_id` в `order_items` есть 3 строки, а в `payments` есть 2 строки. Вы соединили всё в одну таблицу по `order_id` без предварительной агрегации. Сколько строк получится для этого заказа и почему?
- Нужен датасет на уровне `user_id`: выручка из `orders` и число сессий из `sessions`. В обеих таблицах по пользователю много строк (`one-to-many`). Какой подход минимизирует риск `join explosion`?
- Вы хотели посчитать средний чек по заказам как `AVG(order_total)`. Но перед этим соединили `orders` с `order_items` по `order_id` (`one-to-many`). Почему `AVG()` может измениться по сравнению с расчётом на таблице `orders`?
- В каком случае `SUM(order_amount)` после `JOIN` скорее всего останется корректным, без эффекта `duplication`?
- Все вопросы по «JOIN и кардинальность» →