MySQL可以在表中创建表吗?

时间:2014-03-26 17:55:51

标签: mysql

我正在尝试将应用的帐户组织到“分层”网格系统中。

即。 Super_Grid_A中有网格1,2,3,网格1中有帐户A,B,C,网格2中有帐户B,C,D等。

任何指针?

2 个答案:

答案 0 :(得分:0)

您无法在MySQL中的表中创建表。但是您可以对网格表使用主/从方法。看起来像这样的东西:

SQL Fiddle

MySQL 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 |

答案 1 :(得分:0)

我认为您正在考虑MySQL的工作方式不正确。您应该阅读一个名为“关系数据库规范化”的主题:http://en.wikipedia.org/wiki/Database_normalization

我说这个的原因是因为你声明网格1将具有ABC,而网格2将具有BCD,这意味着网格1和网格之间将存在重叠。 BC上的2。这是对的吗?

你最有可能做的事情(如果我理解你的问题)是创建一组彼此相关的表格。

如果您只有3个级别,那么您只需要3个表格。如果您有 n 数量的表,那么您将需要一个更聪明的解决方案,其中行可能会返回到以伪现循环方式指向键的关系表< / p>

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这样的东西,因为它可以让你构建一个更好的状态比构建表更容易。这一切都取决于你的最终目标。