ユーザーが記事を作成および編集できるWebアプリケーションがあります。記事を編集するたびに、新しいリビジョンが作成されます。私はSQLAlchemyをORMとして使用しています。
さて、私が記事を作成するたびに、これが起こります:
# Create the article
article = Article(...)
session.add(article)
session.flush()
# Create the revision
revision = Revision(article.id, ...)
session.add(revision)
session.flush()
# Set article's `current_revision_id` field to the revision's id
article.current_revision_id = revision.id
session.commit()
毎回flush()を呼び出さなければならない理由は、ArticleとRevisionのIDを取得できるようにするためです。ArticleとRevisionは、互いのIDを参照するまで、データベースにコミットできません。
私の質問は、これが正しいことであるかどうかです。多くの人が同時に記事を作成している場合、flush()呼び出しから割り当てられたIDが同期されなくなる可能性はありますか?これは「トランザクション」として受け入れられますか?