2014-03-26 75 views
1

我正在尝试将应用程序的帐户组织到“分层”网格系统中。MySQL可以在表内创建表吗?

即Super_Grid_A具有网格1,2,在它3和电网1具有占A,B,C在它,电网2具有占B,C,d在它等

任何指针?

+0

阅读关于关系数据库,了解如何连接来自不同表格的数据。表格中没有表格,但可以使用ID来引用不同表格中的项目。 – 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中的表内创建表。但是你可以使用主/从方法来处理你的网格表。东西看起来就像这样:

SQL Fiddle

MySQL的32年5月5日架构设置

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

我之所以这么说是因为您声明网格1将具有ABC,网格2将具有BCD,这意味着网格之间会存在重叠在BC上的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一样,因为这会让你构建一个危境状态比建立表更容易。这完全取决于你的最终目标是什么。

相关问题