2010-07-13 75 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时只需要知道它。

相关问题