Предположим, у меня есть две таблицы:
Group
(
id integer primary key,
someData1 text,
someData2 text
)
GroupMember
(
id integer primary key,
group_id foreign key to Group.id,
someData text
)
Я знаю, что мой синтаксис SQL неправильный :) Надеюсь, он достаточно понятен. Моя проблема заключается в следующем: я хочу загрузить запись группы и все записи GroupMember, связанные с этой группой. На мой взгляд, есть два варианта.
Один запрос:
SELECT Group.id, Group.someData1, Group.someData2 GroupMember.id, GroupMember.someData
FROM Group INNER JOIN GroupMember ...
WHERE Group.id = 4;
Два запроса:
SELECT id, someData2, someData2
FROM Group
WHERE id = 4;
SELECT id, someData
FROM GroupMember
WHERE group_id = 4;
Преимущество первого решения состоит в том, что он состоит только из одного обхода базы данных, но имеет недостаток, заключающийся в возврате избыточных данных (все данные группы дублируются для каждого члена группы)
Второе решение не возвращает повторяющихся данных, но включает в себя две поездки в базу данных.
Что здесь предпочтительнее? Я предполагаю, что есть некоторый порог, такой, что если размеры групп станут достаточно большими, стоимость возврата всех избыточных данных будет больше, чем издержки, связанные с дополнительным вызовом базы данных. О каких еще вещах я должен думать здесь?
Спасибо,
Иордания