2010-07-13 76 views
0

我目前正在設計一個數據庫的過程。是否可以在MySQL中的兩個表之間共享一個集合?

我有一張20,000多個記錄的表格,其中有一組記錄(4個值)。我也想提出另一個表(100+記錄),這將有超過同一組枚舉(1個值從同一組)的電流

例子:

tbl1       tbl2 
ID | Letters | Stuff  ID | Letter | Stuff 
----------------------  --------------------- 
0 | A,B,C,D | ...   0 | D  | ... 
1 | A,B,C,D |    1 | C  | 
2 | C,D  |    2 | A  | 
3 | B,C,D |    3 | D  | 
... 

有沒有一種辦法,以確保那些集合是相同的,我可以比較枚舉和集合嗎?

隨着我們數據的變化,我還可能需要添加更多選項。那個組合是否需要一個單獨的表格,然後是一個關聯表格?什麼,我剛纔說的

例子:

tbl1    tbl2    
ID | Stuff   ID | LetterID | Stuff 
------------  ------------------------ 
0 | ...   0 | 3  | ... 
1 |    1 | 2  | 
2 |    2 | 0  | 
3 |    3 | 3  | 
... 

tblLetters   tblLetters1 (Association table) 
ID | Letter   tbl1Id | letterId 
------------  ------------------ 
0 | A    0  | 0 
1 | B    0  | 1 
2 | C    0  | 2 
3 | D    0  | 3 
...?    ... 

我只能用這主要關注的是關聯表的大小是否過大(大部分在TBL1行會的所有4種元素組)。

謝謝!對不起,如果我沒有很好地解釋我的問題。談到SQL時,我非常青睞。

回答

1

你的第二個解決方案看起來很好,通常應避免1列中的逗號分隔值。你可能不需要一個ID,我就把你的ENUM類型的列,並使用tblLetters信的實際類型/列的定義:

tbl1    tbl2    
ID | Stuff   ID | Letter | Stuff 
------------  ------------------------ 
0 | ...   0 | D  | ... 
1 |    1 | C  | 
2 |    2 | A  | 
3 |    3 | D  | 

tblLetters   tblLetters1 (Association table) 
Letter    tbl1Id | letter 
------------  ------------------ 
A     0  | A 
B     0  | B 
C     0  | C 
D     0  | D 

可能是FOREIGN KEY約束添加到tblLetters1.letter & tbl2.letter來執行來自tblLetters的現有信函。

而且在總80K行是沒有任何標準很多,應該沒事(使用適當的指標雖然)

+0

太棒了!感謝您的提示! – KLee1 2010-07-13 19:36:05

0

我要採取刺傷你的問題....
所以從我所理解的,你只是想確保表格在枚舉和設置字段中有「選項」或「變量」。

你可以做的是:

Show create table tbl1; 

你應該看到的是

Create table tbl1 
(id int unsigned, 
stuff set('A','B','C','D'), 
.....) 

Show create table tbl2; 
Create table tbl2 
(id int unsigned, 
stuff enum('A','B','C','D'), 
.....) 

所有你需要到,從技術上講,是要確保兩個表具有相同的變量。你可以用腳本來做到這一點,或者當你做一個ALTER TABLE時只需要知道它。

相關問題