2016-06-04 2 views
0

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

У меня есть 4 таблицы, как следующее:

Table A 
A_id | A_description 

Table B 
B_id | B_description 

Table C 
C_id | C_description 

Table D 
D_id | D_description 

Теперь я хочу, чтобы создать новую таблицу, в которой рассказывают, что 4 таблицы:

Table E 
A_id | B_id | C_id | D_id | D_description 

представление данных должно нравится:

A B C D D_Description 
================================ 
A1-> B1-> C1-> D1 ->Description 
      -> D2 ->Description 
     -> C2-> D1 ->Description 
      -> D2 ->Description 
    -> B2-> C1-> D1 ->Description 
      -> D2 ->Description 
     -> C2-> D1 ->Description 
      -> D2 ->Description 

and so on for A2 ... 

Я начал делать базу данных, как это:

Table A 
A_id | A_description 

Table B 
B_id | A_id | B_description 

которой B_id и A_id является ограничение уникальности. Но я не знаю, как сделать структуру остальных таблиц таким образом.

Итак, как должна выглядеть структура базы данных? (Или как первая структура 4 таблицы должны быть?) Спасибо :)

EDIT: В таблице результат должен быть таким:

Table A 
A_id | A_Description 
    1 explanation 
    2 another explanation 

Table B 
A_id | B_id | B_Description 
    1  1 description 
    2  1 my description 
    2  2 your description 

Где столбец B_id может содержать одни и те же данные, если a_id отличается (например, ограничение уникальности)

+0

'Таблица C -> C_id, B_id, C_Description' и' Таблица D -> D_id, C_id, D_Description' Вы на правильном пути. Без каких-либо объяснений в отношении данных это может быть решением, или вы можете использовать собственное предложение (по 4 таблицы с идентификатором и описанием и один для привязки всех) с уникальным ограничением на эти четыре идентификатора (a, b, c, d) во избежание дублирования. –

+0

благодарит за вашу помощь! :) @JorgeCampos –

+0

Я думаю, вам нужны три таблицы отношений «многие ко многим»: таблица A_B (A_id, B_id), таблица B_C (B_id, C_id), таблица C_D (C_id, D_id). –

ответ

0

Я думаю, что вы просто хотите перекрестное соединение:

Select a.id, b.id, c.id, d.id, d.description 
From a cross join b cross join c cross join d; 

Примечание: это будет заполнить все значения столбцов, но т как работает SQL-результат. Форматирование строк обычно выполняется на уровне приложения.

Вы можете сохранить результаты в таблице, которая связывает их.

+0

Его вопрос заключается в том, как изменить таблицы для добавления внешних ключей, которые связывают их. – Barmar

+0

Спасибо за помощь. Это близко, но каждая строка не должна сочетаться «автоматически» с каждой строкой другой таблицы, что делает крест-соединение (исправьте меня, если я ошибаюсь).Данные не одинаковы для каждой комбинации - @GordonLinoff –

+0

Да, это я имел в виду. Я путаюсь о правильном способе связать эти таблицы @Barmar –

Смежные вопросы