セキュリティ会社のデータベース (MySQL) を設計していて、採用しているすべての警備員を追跡したいと考えています。業界の性質上、かなりの数の人が「解雇」リストに移動されます (ほとんどの人は、悪い条件で解雇された人です)。彼らの中には、1年か2年後に仕事に再応募しようとする傾向があるため、会社は彼らを追跡したいと考えています. また、会社の幹部が、特定の人をそのリストに入れることは不当であると考え、彼らを元に戻すことがあります (私の理解では、MySQL アーカイブが機能しないのはそのためです)。
データベースの「中心」は、データベース内の他のテーブルと多くの関係を持つガードテーブルです。「終了」リストを設計する最も効率的な方法を決定しようとしています。私は2つのオプションを考えました:
Guardsテーブルは、 terminateGuardsテーブルと 1 対 1 の関係にあります。このソリューションで見られる問題は、データを照会したいときはいつでも、SELECT ステートメントに句を追加して、terminatedGuardsテーブルにいる人を除外する必要があることです。
Guards テーブルに似た列を持つ別のテーブルを作成し、ガードがそのテーブルに移動するたびに、Guards テーブルからエントリを完全に消去し、terteredGuardsテーブルにコピーします。このアプローチで私が目にする問題は、そのエントリに関連付けられている多くの関係に従う必要があることです (そして、参照用に、 terminatedGuardsリストにコピーされたエントリを使用してそれらを再作成したい場合があります。たとえば、私は会社によって管理されているさまざまなサイトの警備員の作業履歴を保持するテーブルをterminateGuardsテーブルに再リンクする必要があるため、その警備員が解雇された場合でも、その警備員の作業履歴を保持できます)。
どちらのアプローチがより効率的ですか?
ありがとう。