2010-07-13 9 views
0

Je suis actuellement en train de concevoir une base de données.Est-il possible de partager un ensemble entre deux tables dans MySQL?

J'ai une table de plus de 20 000 enregistrements, qui contient un ensemble (4 valeurs). Je fais aussi une autre table (100+ dossiers) qui aura un ENUM sur le même ensemble (1 valeur du même ensemble)

Exemple de courant:

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  | 
... 

est-il un moyen de vous assurer que les ensembles sont les mêmes, puis-je comparer l'enum et l'ensemble?

Je pourrais aussi avoir besoin d'ajouter plus d'options à l'ensemble que nos données changent. Est-ce qu'une table séparée pour cet ensemble serait nécessaire, et ensuite une table d'association pour cela?

Exemple de ce que je viens de dire:

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 
...?    ... 

Ma seule préoccupation majeure avec c'est de savoir si la taille de la table d'association serait trop grande (la plupart des lignes tbl1 auront les 4 éléments du ensemble).

Merci! Désolé si je n'ai pas très bien expliqué mon problème. Je suis très vert quand il s'agit de SQL.

Répondre

1

Votre deuxième solution semble correcte, les valeurs séparées par des virgules dans une colonne devraient normalement être évitées. Vous pourriez ne pas avoir besoin d'un ID, et je laisserais tomber le type ENUM pour la colonne, et utiliser la définition de type/colonne réelle de la lettre dans 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 

ajouter Peut-être une contrainte FOREIGN KEY à tblLetters1.letter & tbl2.letter pour appliquer une lettre existante de tblLetters.

Et 80K lignes au total est pas beaucoup par aucune norme, il devrait être bien (utiliser les index appropriés si)

+0

Parfait! Merci pour les conseils! – KLee1

0

Je vais prendre un coup de couteau à votre question ....
donc de Ce que je comprends, vous voulez juste vous assurer que les tables ont les "options" ou les "variables" dans les champs enum et set.

Qu'est-ce que vous pouvez faire est:

Show create table tbl1; 

Ce que vous devriez voir est

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'), 
.....) 

Tout ce que vous devez à, techniquement, est assurez-vous que les deux tables ont les mêmes variables. Vous pouvez le faire avec un script ou juste en être conscient lorsque vous faites un ALTER TABLE.