我目前正在设计数据库。
我有一张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,我非常环保。
答案 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时了解它。