2014-03-26 113 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一樣,因爲這會讓你構建一個危境狀態比建立表更容易。這完全取決於你的最終目標是什麼。

相關問題