2014-03-26 6 views
1

Я пытаюсь организовать учетные записи для приложения в «иерархической» сетке.Может ли MySQL создавать таблицы в таблицах?

т.е. Super_Grid_A имеет сетки 1, 2, 3 в нем и сетка 1 имеет счета А, В, С в нем, Сетка 2 имеет счета B, C, D в нем, и т.д.

Любые указатели?

+0

Читайте о реляционных базах данных, как вы можете подключать данные из разных таблиц. В таблице нет такой таблицы, но вы можете использовать идентификаторы для ссылок на разные таблицы. – Shomz

+0

Я не думаю, что вы хотите это сделать, Mysql сломается. Возможно, посмотрите таблицы JOIN – Tasos

+0

Вложенные таблицы не поддерживаются в MySQL, однако они представляют собой концепцию, существующую в [базах данных ORACLE] (http://docs.oracle.com/cd/A97630_01/appdev.920/a96624/05_colls.htm). http://forums.mysql.com/read.php?61,60008,161545#msg-161545 указано, что mySQL не поддерживает их, но многозначные атрибуты. – xQbert

ответ

0

Вы не можете создавать таблицы в таблицах в MySQL. Но вы можете использовать подход master/slave для таблицы grid. То, что будет выглядеть следующим образом:

SQL Fiddle

MySQL Setup 5.5.32 Схема:

CREATE TABLE grid 
    (`id` int, `name` varchar(12), `master_id` int) 
; 

INSERT INTO grid 
    (`id`, `name`, `master_id`) 
VALUES 
    (1, 'Super_Grid_A', 0), 
    (2, 'Grid 1', 1), 
    (3, 'Grid 2', 1), 
    (4, 'Grid 3', 1) 
; 

CREATE TABLE account 
    (`id` int, `name` varchar(9)) 
; 

INSERT INTO account 
    (`id`, `name`) 
VALUES 
    (1, 'account A'), 
    (2, 'account B'), 
    (3, 'account C'), 
    (4, 'account D') 
; 

CREATE TABLE grid_account 
    (`grid_id` int, `acct_id` int) 
; 

INSERT INTO grid_account 
    (`grid_id`, `acct_id`) 
VALUES 
    (2, 1), 
    (2, 2), 
    (2, 3), 
    (3, 2), 
    (3, 3), 
    (3, 4) 
; 

Запрос 1:

select master.name master_grid, slave.name slave_grid, acct.name account 
from grid master 
inner join grid slave on master.id = slave.master_id 
inner join grid_account grid_acct on slave.id = grid_acct.grid_id 
inner join account acct on grid_acct.acct_id = acct.id 
where master.master_id = 0 

Results:

| MASTER_GRID | SLAVE_GRID | ACCOUNT | 
|--------------|------------|-----------| 
| Super_Grid_A |  Grid 1 | account A | 
| Super_Grid_A |  Grid 1 | account B | 
| Super_Grid_A |  Grid 1 | account C | 
| Super_Grid_A |  Grid 2 | account B | 
| Super_Grid_A |  Grid 2 | account C | 
| Super_Grid_A |  Grid 2 | account D | 
0

Я думаю, вы думаете о том, как работает MySQL неправильно. Вы должны прочитать по теме «Нормализация нормативной базы данных»: http://en.wikipedia.org/wiki/Database_normalization

Причина, по которой я говорю, это потому, что вы заявляете, что Grid 1 будет иметь ABC, а Grid 2 будет иметь BCD, что означает, что между сеткой будет перекрытие 1 & 2 на БК. Это верно?

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

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

Примера 3 уровня глубокого подход:

Super_Grid      Grid      SubGrid 
+-----+------+    +-----+-------+-----+    +-----+------+-----+ 
| key | grid |    | key | super | grid|    | key | grid | sub | 
+------------+ key to super +-----+-------+-----+ key to grid +-----+------+-----+ 
| 1 | A | <-1-------n-<| 1 | 1 | 1 |<-1-------n-<| 1 | 1 | A | 
+-----+------+    | 2 | 1 | 2 |    | 2 | 1 | B | 
          +-----+-------+-----+    | 3 | 1 | C | 
                   | 3 | 2 | D | 
                   +-----+------+-----+ 

Возможно, вы захотите изучить подход SQL без необходимости. Что-то вроде MongoDB, потому что это позволит вам построить heirachical состояние намного проще, чем строить таблицы. Все зависит от вашей конечной цели.

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