ホームページ > データベース > mysql チュートリアル > データベース内の個人グループ内の住所変更用に一意のシリアル番号を効率的に生成するにはどうすればよいですか?

データベース内の個人グループ内の住所変更用に一意のシリアル番号を効率的に生成するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-07 19:36:42
オリジナル
938 人が閲覧しました

How Can I Efficiently Generate Unique Serial Numbers for Address Changes within Person Groups in a Database?

データベースのシリアル番号によるアドレス変更追跡の効率化

データベース内のアドレス変更を管理するには、多くの場合、各変更を記録する履歴テーブルが必要になります。 このテーブルには通常、個人 ID、各住所変更のシーケンス番号、タイムスタンプ、および以前の住所が含まれます。 ただし、ユーザーごとにシーケンス番号を自動的に増加させるのは、驚くほど複雑になる可能性があります。

アプローチの簡素化: 自動インクリメント制約を回避する

複雑なソリューションにつながることが多い自動インクリメントのシーケンスや制約を使用する代わりに、標準のシリアル (自動インクリメント) 列または IDENTITY 列を使用する単純な方法があります。

<code class="language-sql">CREATE TABLE address_history (
  address_history_id serial PRIMARY KEY,
  person_id INT NOT NULL REFERENCES people(id),
  created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
  previous_address TEXT
);</code>
ログイン後にコピー

ウィンドウ関数を使用したシリアル番号の生成

このテーブル構造を使用すると、ウィンドウ関数は、ギャップのない各個人の連続番号を生成するための洗練されたソリューションを提供します。

<code class="language-sql">CREATE VIEW address_history_nr AS
SELECT *, ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY address_history_id) AS adr_nr
FROM address_history;</code>
ログイン後にコピー

このビューは、元のテーブルを直接置き換えるものとして機能し、クエリ内で必要なシリアル番号 (adr_nr) を提供します。

効率のためのデータ モデルの最適化

最適なパフォーマンスを得るには、次のデータ モデルの改善を検討してください。

  • 正確な時間追跡には、TIMESTAMP WITHOUT TIME ZONE の代わりに TIMESTAMP WITH TIME ZONE (または DATETIME) を使用します。
  • データストレージを最小限に抑えます。 previous_address フィールドだけで十分なので、address 列と original_address 列を個別に作成する必要はありません。 これにより、ストレージ容量が削減され、クエリ速度が向上します。

以上がデータベース内の個人グループ内の住所変更用に一意のシリアル番号を効率的に生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート