3

これは私の学校のプロジェクトです。eForum部分を担当しています。ユーザーを削除しようとしましたが、削除されたユーザーのすべてのスレッドと返信も削除されます。

    public boolean deleteUser() {
    boolean success = false;
    DBController db = new DBController();
    db.setUp("IT Innovation Project");
    String sql = "DELETE FROM forumUsers where users_id = " + userID + "";
    if (db.updateRequest(sql) == 1)
        success = true;
    db.terminate();
    return success;
}

このメソッドは、テーブルの最初の列の値を取得し、userID として格納します。次に、delete sql ステートメントを実行して特定のユーザーを削除します。

    public boolean deleteThread() {
    boolean success = false;
    DBController db = new DBController();
    db.setUp("IT Innovation Project");
    String sql = "DELETE FROM forumTopics where topic_id = " + threadID
            + "";
    if (db.updateRequest(sql) == 1)
        success = true;
    db.terminate();
    return success;
}

このメソッドに関しては、すべてのスレッドを表示している別のテーブルの最初の列の値を取得し、delete sql ステートメントを実行します。

ただし、一部のユーザーを削除した後、削除されたユーザーによるスレッドと返信はまだデータベースに保存されています。現在、データベースで 1 つのユーザー テーブルと 1 つのスレッド テーブルを使用しています。両方のテーブルをいわゆる「同期」する方法はありますか? 内部結合ですか?

前もって感謝します。

4

1 に答える 1

0

これは、カスケード削除 ( http://support.microsoft.com/kb/304466 )を使用して関係をセットアップするのに最適なケースのようです。

カスケード更新と削除

参照整合性が適用されるリレーションシップの場合、Microsoft Access で関連レコードを自動的にカスケード更新またはカスケード削除するかどうかを指定できます。これらのオプションを設定すると、通常は参照整合性規則によって防止される削除および更新操作が許可されます。主テーブルのレコードを削除したり、主キーの値を変更したりすると、Microsoft Access は関連するテーブルに必要な変更を加えて、参照整合性を維持します。

ただし、Cascade Delete は細心の注意を払って使用する必要があることに注意してください。これらの投稿は SQL Server に言及していますが、アイデアはどのデータベースにも当てはまります。

ほとんどの場合、私は記録を最初から削除することはせず、後で削除するために削除した記録にタイムスタンプを付けます。

カスケード削除

于 2013-01-31T12:54:01.900 に答える