1

データベース内の同じテーブルを共有する複数のユーザーが必要ですが、ユーザーごとに 1 つの auto_increment 値があります。組み込みデータベース JavaDB を使用しますが、私が知っている限り、この機能はサポートされていません。どうすれば実装できますか?

ユーザーが最後に挿入した行を検索して追加する挿入にトリガーを実装する必要がありますか、それともより良い代替手段がありますか? それとも、アプリケーション コードでこれを実装する方が良いでしょうか?

それとも、これは単に悪い考えですか?これは、ユーザーごとに新しいテーブルを作成するよりも維持しやすいと思います。

例:

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 |
+----+-------------+---------+------+
4

1 に答える 1

1

ユーザーごとにセッションが 1 つだけであることを保証できれば、かなり安全に実行できます。ユーザーが複数のセッションを持つことができる場合、これをトリガーで行うかアプリケーション コードで行うかに関係なく、現在のセッションだけが次の番号を取得できるように、排他的なテーブル ロックを取得する必要があります。

ただし、ユーザーごとにテーブルを作成しないでください。それはあなたのSQLを本当に醜くし、あらゆる種類のSQL計画の共有を妨げます.

シリアル番号の代わりにタイムスタンプを使用すると、より適切なサービスが提供される場合があります。

于 2010-05-14T07:00:49.310 に答える