Как сделать так, чтобы несколько таблиц разделяли столбец id в MySQL - PullRequest
1 голос
/ 12 декабря 2011

Этот вопрос задавался ранее, но так и не был дан ответ (по крайней мере, так, как я хочу это сделать).В моей базе данных три таблицы: threads, responses и votes.Мне нужно, чтобы они разделяли только поле id.Так что я могу сделать что-то вроде

SELECT * FROM threads AS t JOIN responses AS r JOIN votes AS v
WHERE id = 15

и получу только поток ответ или (эксклюзивно) запись голосования с id = 15.

Есть ли способ сделать это безсоздать дополнительную таблицу?Я не спрашиваю, хорошая ли это идея (что, вероятно, нет), но если это возможно и как это сделать.

Ответы [ 2 ]

1 голос
/ 12 декабря 2011

Если я правильно понимаю, вы хотите получить поток, или ответ, или проголосовать с id = 5. Нет никакой возможности обеспечить уникальность поля идентификатора между таблицами (то есть предотвратить создание ответа и голосовать с тем же значением идентификатора) в MySQL, но вы можете сделать это в своем приложении.

И вы можете получить нужную строку следующим образом:

SELECT id, name, 'thread' AS `type` FROM threads WHERE id=5
UNION
SELECT id, name, 'response' AS `type` FROM responses WHERE id=5
UNION 
SELECT id, name, 'vote' AS `type` FROM votes WHERE id=5
0 голосов
/ 12 декабря 2011

Ваш выбор выдаст ошибку, потому что поле id в предложении where неоднозначно.Я полагаю, что во всех этих трех таблицах есть поле id.

SELECT * FROM threads AS t JOIN responses AS r JOIN votes AS v
WHERE id = 15

Таким образом, даже если поле id «каким-то образом разделено» между этими полями, вам придется сделать предложение where недвусмысленным:

SELECT * FROM threads AS t JOIN responses AS r JOIN votes AS v
WHERE t.id = 15

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

Та же логика применима и к отношениям между responses и votes (один ответ будет иметь много голосов).

Следовательно Я пришел к выводу, что невозможно разделить поле id между этими тремя таблицами.

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