我正在尝试将应用程序的帐户组织到“分层”网格系统中。MySQL可以在表内创建表吗?
即Super_Grid_A具有网格1,2,在它3和电网1具有占A,B,C在它,电网2具有占B,C,d在它等
任何指针?
我正在尝试将应用程序的帐户组织到“分层”网格系统中。MySQL可以在表内创建表吗?
即Super_Grid_A具有网格1,2,在它3和电网1具有占A,B,C在它,电网2具有占B,C,d在它等
任何指针?
您不能在MySQL中的表内创建表。但是你可以使用主/从方法来处理你的网格表。东西看起来就像这样:
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
| 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 |
我想你是在想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一样,因为这会让你构建一个危境状态比建立表更容易。这完全取决于你的最终目标是什么。
阅读关于关系数据库,了解如何连接来自不同表格的数据。表格中没有表格,但可以使用ID来引用不同表格中的项目。 – Shomz
我不认为你想这样做,Mysql会打破。也许查看JOIN表 – Tasos
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