2012-12-21 52 views
0

我有這個目標,我需要插入到數據庫(包括正確的關係) 我試圖找到什麼是建立與正確的領域和關係數據庫表中的最佳方式..數據庫結構的指導

我obects:

對象A:

String id; 
String mode; 
String name; 
Dictionary dict<String code,List<Pair<String index,String val>> 

對象B:

String sysId; 
List<objectA> objectAs; 
String seates; 

它應該是objectB.sysId之間的一個一對多關係objectA.id(許多對象A到一個對象B)
和對象B的SYSID是主鍵。 現在關於objectA我不知道如何處理正確的字典...

在此先感謝。

回答

0
CREATE TABLE ObjectA 
(
    Id  CHAR(10) NOT NULL PRIMARY KEY, 
    Mode CHAR(10) NOT NULL, 
    Name CHAR(20) NOT NULL 
); 

CREATE TABLE ObjectA_Dict 
(
    Id  CHAR(10) NOT NULL REFERENCES ObjectA, 
    Code CHAR(10) NOT NULL, 
    PRIMARY KEY(Id, Code) 
); 

CREATE TABLE ObjectA_DictEntry 
(
    Id  CHAR(10) NOT NULL, 
    Code CHAR(10) NOT NULL, 
    FOREIGN KEY(Id, Code) REFERENCES ObjectA_Dict, 
    Index CHAR(10) NOT NULL, 
    Value VARCHAR(255) NOT NULL, 
    PRIMARY KEY(Id, Code, Index) 
); 

既然你不告訴我們用來識別對象的字符串的組織任何東西,它是很難知道有多大,使他們。如果您願意,您可以決定在表格中使用某種自動分配的整數值;這會改變查詢需要編寫的方式,但可能會更好地處理ORM(對象關係映射)的一些工具。由於您尚未識別出您的目標數據庫系統,因此也不得不留下未說明的內容。在ObjectA_DictEntry中,您可以將Id作爲外鍵引用ObjectA,但這不是必需的。在顯示組合鍵的情況下,您可以僅使用ObjectA_DictEntry而不必參考其他表格。如果你使用自動分配的值,你有時會被迫做連接。

CREATE TABLE ObjectB 
(
    SysId CHAR(10) NOT NULL PRIMARY KEY, 
    Seates CHAR(20) NOT NULL 
); 

CREATE TABLE ObjectB_List 
(
    SysId CHAR(10) NOT NULL REFERENCES ObjectB, 
    Id  CHAR(10) NOT NULL REFERENCES ObjectA, 
    PRIMARY KEY (SysId, Id) 
); 

這是我認爲你的ObjectB架構應該看起來像。我認爲你應該已經展示了你認爲應該看起來的樣子;它會改善你的問題。