Вы хотите добавить к orders атрибут category из таблицы products(product_id, category) и не изменить количество строк заказов. Что важнее всего проверить про products, чтобы избежать duplication?
AЧто в
orders нет повторяющихся order_idBЧто в
products product_id уникален, то есть one-to-one cardinality по product_idCЧто
category заполнен на 100%DЧто вы используете
distinct после JOINПравильный ответ. Если справочник имеет
one-to-one cardinality по ключу, атрибутный JOIN не вызывает duplication строк.Разбор
Проблемы начинаются, когда в справочнике на один product_id несколько строк, например разные версии атрибутов. Тогда один заказ начинает матчиться на несколько строк и появляется duplication. Проверка уникальности ключа — простой способ предсказать изменение числа строк ещё до расчёта метрик.
Проверь себя · 1/3разбор после ответа
После
JOIN users с events по user_id (one-to-many) вы хотите получить число пользователей, у которых был хотя бы один ивент. Какой расчёт даст корректное число пользователей?Ещё вопросы по теме «JOIN и кардинальность»
- В таблице `users` 100 000 строк, в таблице `user_profiles` — ровно одна строка на каждого `user_id`. Вы делаете `INNER JOIN` по `user_id`. Что верно про число строк результата?
- Вы соединяете `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`?
- Все вопросы по «JOIN и кардинальность» →