是否可以在MySQL中的两个表之间共享一个集合?

时间:2010-07-13 17:31:06

标签: mysql set

我目前正在设计数据库。

我有一张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,我非常环保。

2 个答案:

答案 0 :(得分: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

可能会向tblLetters1.letter&添加FOREIGN KEY约束。 tbl2.letter强制执行来自tblLetters的现有信函。

根据任何标准,总共80K行并不多,应该没问题(尽管使用适当的索引)

答案 1 :(得分: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时了解它。