Оптимизировать схему для JOIN через большую, но конечную группу таблиц - PullRequest
0 голосов
/ 14 июня 2011

У меня есть некоторая гибкость здесь, поэтому я ищу несколько советов, прежде чем заблокировать вещи.У меня также есть несколько способов решения этой проблемы, но я ищу совет относительно наиболее эффективного способа сделать это.Поскольку специфика моих типов данных немного неясна, я буду использовать более понятную метафору объекта.

Сейчас у меня есть две основные таблицы и большое, но конечное число дополнительных таблиц.Применяется следующая бизнес-логика.

  1. Каждому конкретному столу животных присвоено уникальное поле, например, «диаметр рыла» для свиньи или «усы» для кошки.Есть также другое поле
  2. В таблице животных есть поле, обозначающее животных "Роль".
  3. В клетке может быть несколько животных.
  4. Животныесвязаны с клетками по ограничениям FK.Конкретные таблицы животных связаны с таблицей животных ограничениями FK.

    • Клетки
      • Животные
        • Кошка
        • Собака
        • Свинья и т. Д.

Основной вопрос, который задают, что находится в клетке?Мне также нужно быть в состоянии найти все клетки как можно быстрее и получить всю информацию о животных, которые попадают в роль «вкусно».Иногда свинья будет «вкусной», иногда это может быть кошка.В зависимости от типа «вкусного» животного мне нужно отобразить его конкретную информацию.

Каков наиболее эффективный дизайн схемы или SQL-оператор для поиска этой информации?

В моей первой попытке были только клетки и несколько таблиц SpecificAnimal.Это казалось плохой идеей, потому что мне нужно было объединить более 10 таблиц, чтобы выяснить, что находится в клетке.Затем я переместил общие атрибуты в таблицу животных, что позволило мне легко увидеть, какие животные были в клетке, хотя для получения всех данных требовался поиск по конкретным таблицам.Я размышлял о сохранении определенных атрибутов в какой-то форме строки CSV (но я еще не настолько отчаялся). Конечно, я мог бы использовать EAV, но это также кажется неэффективным, поскольку на самом деле существует конечное количество животных.

Я беспокоюсь?Должен ли я просто прикусить пулю и принять соединения за 10 столами?Просто беспокоюсь о производительности .... Любые идеи или шаблоны проектирования, которые можно порекомендовать.Страдает от информационной перегрузки и насморка.Помогите пожалуйста.

1 Ответ

2 голосов
/ 14 июня 2011

Действительно трудно ответить на вопросы «какая схема лучше», потому что они всегда связаны с компромиссами. Частично это означает, что для точного соотнесения одного дизайна с другим необходимо иметь измерения (например, скорости), на которых должно основываться ваше решение. (Возможно, это не тот ответ, который вы искали).

Что бы это ни стоило, 10 объединений - это не массовое число, и в зависимости от количества животных и клеток в вашей системе вы можете никогда не заметить проблемы со скоростью. Кроме того, если действительно существует один «основной запрос», то вы можете использовать материализованные представления, чтобы быстро ответить хотя бы на этот запрос.

И, наконец, несколько всеобъемлющих советов: выбирайте чистую модель данных, пока у вас не будет четких чисел, чтобы диктовать, что вы «запутали» дизайн.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...