Question

Je voudrais avoir plusieurs utilisateurs qui partagent les mêmes tables de la base de données, mais ont une valeur auto_increment par utilisateur. Je vais utiliser une base de données intégrée, JavaDB et comme ce que je sais qu'il ne supporte pas cette fonctionnalité. Comment puis-je mettre en œuvre?

Dois-je mettre un déclencheur sur les inserts lookup utilisateurs dernière ligne insérée, puis ajouter un, ou y at-il une meilleure alternative? Ou est-il préférable de mettre en œuvre ce dans le code d'application?

Ou est-ce juste une mauvaise idée? Je pense que cela est plus facile à entretenir que la création de nouvelles tables pour chaque utilisateur.

Exemple:

table
+----+-------------+---------+------+
| ID | ID_PER_USER | USER_ID | DATA |
+----+-------------+---------+------+
|  1 |           1 |       2 | 3454 |
|  2 |           2 |       2 | 6567 |
|  3 |           1 |       3 | 6788 |
|  4 |           3 |       2 | 1133 |
|  5 |           4 |       2 | 4534 |
|  6 |           2 |       3 | 4366 |
|  7 |           3 |       3 | 7887 |
+----+-------------+---------+------+

SELECT * FROM table WHERE USER_ID = 3
+----+-------------+---------+------+
| ID | ID_PER_USER | USER_ID | DATA |
+----+-------------+---------+------+
|  3 |           1 |       3 | 6788 |
|  6 |           2 |       3 | 4366 |
|  7 |           3 |       3 | 7887 |
+----+-------------+---------+------+

SELECT * FROM table WHERE USER_ID = 2
+----+-------------+---------+------+
| ID | ID_PER_USER | USER_ID | DATA |
+----+-------------+---------+------+
|  1 |           1 |       2 | 3454 |
|  2 |           2 |       2 | 6567 |
|  4 |           3 |       2 | 1133 |
|  5 |           4 |       2 | 4534 |
+----+-------------+---------+------+
Était-ce utile?

La solution

Si vous ne pouvez garantir qu'il n'y aura qu'une seule session par utilisateur, il serait alors assez sûr de le faire. Si un utilisateur peut avoir plus d'une session alors si vous faites cela dans un déclencheur ou dans le code de l'application, vous devrez prendre un verrou de table exclusif pour vous assurer que la session que vous êtes est le seul à obtenir ce numéro suivant.

Mais ne vont pas pour une table par utilisateur. Cela rendrait votre sql vraiment laid et éviter toute sorte de partage plan sql.

Vous pouvez être mieux servis en utilisant un horodatage au lieu d'un numéro de série.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top