У меня есть 2 таблицы, таблица questions и таблица answers со следующими примерами данных:

+-----------------------------------+
| Questions                         |
+----+------------------------------+
| id | title                        |
+----+------------------------------+
|  1 | What is your favourite game? |
|  2 | What is your favourite food? |
+----+------------------------------+

+-------------------------------------------------+
| Answers                                         |
+----+------------------------------+-------------+
| id | text                         | question_id |
+----+------------------------------+-------------+
|  1 | The Last Of Us               |           1 |
|  2 | PlayerUnknowns Battlegrounds |           1 |
|  3 | Uncharted                    |           1 |
|  4 | KFC                          |           2 |
|  5 | Pizza                        |           2 |
+----+------------------------------+-------------+

Создавая отношения «один ко многим», так как на один вопрос может быть много ответов, я могу выполнить любое из следующих действий:

SELECT
    id, text
FROM
    answers
WHERE
    question_id = 1

Или же:

SELECT
    answers.id, answers.text
FROM
    answers
JOIN
    questions
ON
    answers.question_id = questions.id
WHERE
    questions.id = 1

Или же:

SELECT
    answers.id, answers.text
FROM
    questions
JOIN
    answers
ON
    questions.id = answers.question_id
WHERE
    questions.id = 1

Все они возвращают следующие (ожидаемые) результаты:

+-----------------------------------+
| Results                           |
+----+------------------------------+
| id | text                         |
+----+------------------------------+
|  1 | The Last Of Us               |
|  2 | PlayerUnknowns Battlegrounds |
|  3 | Uncharted                    |
+----+------------------------------+

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

0
no. 13 Мар 2018 в 17:26

2 ответа

Лучший ответ

Если вы хотите только получить ответы, не включайте таблицу вопросов. Просто выберите из ответов.

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

1
Zohar Peled 13 Мар 2018 в 14:30

Если вы хотите обозначить взаимосвязь между таблицей «вопросы» и «ответы», вы можете сделать столбец идентификатора из таблицы «вопросы» как первичный ключ и столбец question_id из «ответов» как внешний ключ, и вы используете СОЕДИНЕНИЕ, когда вам нужны данные (столбцы) из более чем одной таблицы в вашем случае, если вы хотите, чтобы столбец заголовка был включен, вы можете присоединиться к таблицам

1
Sas 13 Мар 2018 в 14:35