我正在尝试将应用的帐户组织到“分层”网格系统中。
即。 Super_Grid_A中有网格1,2,3,网格1中有帐户A,B,C,网格2中有帐户B,C,D等。
任何指针?
答案 0 :(得分:0)
您无法在MySQL中的表中创建表。但是您可以对网格表使用主/从方法。看起来像这样的东西:
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这样的东西,因为它可以让你构建一个更好的状态比构建表更容易。这一切都取决于你的最终目标。