Хотя я использую Rails, этот вопрос больше касается проектирования баз данных. У меня есть несколько объектов в моей базе данных со схемой, похожей на эту: http://fishwebby.posterous.com/40423840
Если я хочу получить список людей и заказать его по фамилии, это не проблема. Однако, если я хочу получить список людей, упорядоченных по фамилии, зарегистрированных в определенной группе, я должен использовать оператор SQL, который включает несколько объединений в четырех таблицах, что-то вроде этого:
SELECT group_enrolment.*, person.*
FROM person INNER JOIN member ON person.id = member.person_id
INNER JOIN enrolment ON member.id = enrolment.member_id
INNER JOIN group_enrolment ON enrolment.id = group_enrolment.enrolment_id
WHERE group_enrolment.id = 123
ORDER BY person.surname;
Хотя это работает, мне кажется, что это немного неэффективно, и потенциально по мере роста моей схемы эти запросы могут становиться все более и более сложными.
Другой вариант может состоять в том, чтобы соединить таблицу person со всеми другими таблицами в запросе, включив person_id в другие таблицы, тогда это будет просто одно единственное объединение, например
SELECT group_enrolment.*, person.*
FROM person INNER JOIN group_enrolment ON group_enrolment.person_id
WHERE group_enrolment.id = 123
ORDER BY person.surname;
Но это будет означать, что в моей схеме таблица person объединена с множеством других таблиц. Помимо сложной схемы, кто-нибудь видит в этом какие-либо недостатки?
Буду очень признателен за любые комментарии по этому вопросу - будь то то, что я делаю сейчас (объединение в несколько таблиц), или второе решение, или другое, которое мне не пришло в голову, - лучший путь. 1014 *
Большое спасибо заранее