bonjour à tous,
je dois modéliser une association 1-N, et j'étais parti sur une liste chaînée avec le modèle suivant :
Mais une de mes associations 1-N risque de contenir un N assez élevé (> 100, ok tout est relatif )... Je pense donc passer sur un modèle classique d'association entre deux tables dans une table séparée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 CREATE TABLE TableD( TableDId BIGINT NOT NULL AUTO_INCREMENT, NextTableDId BIGINT, ParamD VARCHAR(50), PRIMARY KEY(TableDId) ); CREATE TABLE TableC( TableCId BIGINT NOT NULL AUTO_INCREMENT, ParamC VARCHAR(50), TableDId BIGINT, PRIMARY KEY(TableCId), INDEX (TableDId), FOREIGN KEY (TableDId) REFERENCES TableD (TableDId) );
Mais j'aurais voulu tester le temps que prend la récupération de tous les TableDId correspondants à un TableCId. Et là je coince. J'ai oublié la façon de gérer les select "récursifs". Pour le modèle classique j'utilise la requête suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 CREATE TABLE TableA( TableAId BIGINT NOT NULL AUTO_INCREMENT, ParamA VARCHAR(50), PRIMARY KEY(TableAId) ); CREATE TABLE TableB( TableBId BIGINT NOT NULL AUTO_INCREMENT, ParamB VARCHAR(50), PRIMARY KEY(TableBId) ); CREATE TABLE TableABAssociation( TableAId BIGINT NOT NULL, TableBId BIGINT NOT NULL, PRIMARY KEY(TableAId, TableBId) );
mais pour les listes chaînées, je ne trouve pas. Avez-vous vu des choses similaires ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT TableBId FROM TableABAssociation WHERE TableAId = 1; /* J'ai fait du provisioning avant le select. */
Pour info, j'utilise mysql version 4.0 embarquée dans debian, mais je suis ouvert à toute base gratuite/open source.
Merci !
Partager