Что является более оптимальным?Соедините 2 таблицы или используйте дополнительный столбец в таблице - PullRequest
0 голосов
/ 12 апреля 2019

Таблица A1:

| id | name  | code | level |
|  1 | Anton | A111 |     2 |
|  2 | Berta | A112 |     5 |

Таблица B1:

| id | name  | code |
|  1 | Anton | A111 |
|  2 | Berta | A112 |

Таблица B2:

| id | code | level |
|  1 | A111 |     2 |
|  2 | A112 |     5 |

Что является более оптимальным?

используйте таблицу A1 (столбец уровня):

SELECT 'id,name' FROM A1 WHERE level=2;

ИЛИ

используйте таблицу B1 и таблицу B2 при соединении (столбец кода):

SELECT 'id,name' FROM B1 LEFT JOIN B2 ON B1.code=B2.code WHERE level=2;

благодарюи.

Ответы [ 2 ]

2 голосов
/ 12 апреля 2019

Общий ответ на ваш вопрос заключается в том, что предпочтительнее работать с двумя отдельными таблицами, а не с объединенной / комбинированной версией A1. Причиной этого является принцип нормализации . Рассмотрим ситуацию, когда данное имя / код соответствует больше , чем один уровень, например это B2:

| id | code | level |
|  1 | A111 |     2 |
|  1 | A111 |     3 |
|  1 | A111 |     4 |
|  2 | A112 |     5 |

Теперь присоединение приведет к следующей таблице:

| id | name  | code | level |
|  1 | Anton | A111 |     2 |
|  1 | Anton | A111 |     3 |
|  1 | Anton | A111 |     4 |
|  2 | Berta | A112 |     5 |

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

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

0 голосов
/ 12 апреля 2019

Первый случай (с одной таблицей) будет работать быстрее.Также у вас есть ключ varchar в первом случае, запросы SELECT будут работать медленнее, чем с целочисленными ключами.

Если у вас есть две таблицы, которые должны быть объединены в запросах SELECT, иногда может быть хорошим решением сохранить некоторые поля изсвязанная таблица в первой таблице.

Например, у вас есть таблица Users с полем town_id и таблица Town с town_name.Запрос информации о пользователе и названии города происходит быстрее, если название города хранится в таблице User.

...