Нужно ли использовать Big-Table со значениями NULL или не-NULL Multi-Tables?

0

В следующих таблицах: http://sqlfiddle.com/#!9/a28b23/6/0

С каким дизайном лучше всего пойти?

Дизайн Big-One:

##BIG_ONE //ALL
SELECT * FROM  bigdocs ;

##BIG_ONE //18+
SELECT * FROM  bigdocs  WHERE age >= 18;

##BIG_ONE //18-
SELECT * FROM  bigdocs  WHERE age < 18;

Или Multi-One Design:

##MULTI-ONE //ALL
SELECT * FROM  docs_18 
UNION ALL
SELECT  id ,  name ,  age , NULL, NULL FROM  docs ;

##MULTI-ONE //18+
SELECT * FROM  docs_18 ;

##MULTI-ONE //18-
SELECT * FROM  docs ;

##MULTI-ONE //18-
SELECT * FROM docs;

каждый запрос представляет собой одно использование, а не использование "все-в-одном", что является лучшим дизайном, с которым я должен работать?

Теги:
optimization
query-optimization

1 ответ

1
Лучший ответ

Место для начала - каждая строка представляет разные объекты. То есть, если у вас есть отношения с внешним ключом, вы ожидаете иметь отдельные отношения для толпы менее 18 лет против всех остальных.

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

Это настоятельно предлагает одну таблицу.

То, что вы можете сделать, - это посмотреть на таблицу для каждой группы людей. Вы можете даже разбивать таблицу по возрастным группам по соображениям производительности.

Но нет априорной причины разделить совершенно разумную сущность на две разные таблицы.

Одно важное соображение заключается в том, что две группы имеют разные требования безопасности. Безопасность часто проще применять на уровне таблицы, чем на уровне строк, поэтому это будет рассмотрение (хотя и не предлагаемое вопросом).

  • 0
    Если бы я пошел с bigdocs , если у него есть миллионная запись, он все равно был бы так же быстр, как одиночный запрос docs_18 если бы у меня был Index по age и я использовал WHERE age >= 18 ? В целом, я забочусь о производительности больше всего.
  • 1
    Рассматривали ли вы возможность переносить записи каждый раз, когда у кого-то день рождения?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню