📄 DB_UPDATE_PATTERN_SPECIFICATION.md

データベース更新パターン仕様書

論理削除パターンの適用範囲

この論理削除パターンは以下のマスタテーブルに適用されます: - 送信パターン (SendPatterns) - 顧客マスタ (CustomerMaster)

データ更新仕様

変更内容

マスタデータの更新方法が以下のように変更されました:

従来の方法

新しい方法

  1. 論理削除: 既存レコードをUPDATEで未使用フラグ(UnusedFlag = 1)に設定
  2. 新規登録: 新しいレコードをINSERTで追加

実装例

1. 送信パターン (SendPatterns)

-- Step 1: 既存レコードを論理削除(未使用に設定)
UPDATE SendPatterns
SET UnusedFlag = 1,
UpdatedAt = GETDATE()
WHERE PatternId = @PatternId
AND UnusedFlag = 0;

-- Step 2: 新しいレコードを挿入
INSERT INTO SendPatterns (
PatternId,
PatternName,
Description,
UnusedFlag,
CreatedAt,
UpdatedAt
) VALUES (
@NewPatternId,
@PatternName,
@Description,
0, -- 使用中
GETDATE(),
GETDATE()
);

2. 顧客マスタ (CustomerMaster)

-- Step 1: 既存レコードを論理削除(未使用に設定)
UPDATE CustomerMaster
SET UnusedFlag = 1,
UpdatedAt = GETDATE()
WHERE CustomerId = @CustomerId
AND UnusedFlag = 0;

-- Step 2: 新しいレコードを挿入
INSERT INTO CustomerMaster (
CustomerId,
CustomerName,
CustomerCode,
Email,
UnusedFlag,
CreatedAt,
UpdatedAt
) VALUES (
@NewCustomerId,
@CustomerName,
@CustomerCode,
@Email,
0, -- 使用中
GETDATE(),
GETDATE()
);

テーブル構造の変更

-- SendPatternsテーブルに未使用フラグカラムを追加
ALTER TABLE SendPatterns
ADD UnusedFlag BIT NOT NULL DEFAULT 0;

-- CustomerMasterテーブルに未使用フラグカラムを追加
ALTER TABLE CustomerMaster
ADD UnusedFlag BIT NOT NULL DEFAULT 0;

-- インデックスの追加(パフォーマンス向上のため)
CREATE INDEX IX_SendPatterns_UnusedFlag
ON SendPatterns(UnusedFlag);

CREATE INDEX IX_CustomerMaster_UnusedFlag
ON CustomerMaster(UnusedFlag);

メリット

  1. データの履歴保持: 過去のパターンデータが残るため、監査やトラブルシューティングが容易
  2. 参照整合性の維持: 他のテーブルから参照されているデータを安全に無効化できる
  3. 復元可能性: 誤って削除した場合でも、フラグを戻すだけで復元可能

注意事項

関連するDAO/DTOの変更

1. SendPattern関連

DAO (Data Access Object)
public List<SendPatternDto> GetActivePatterns()
{
string sql = @"
SELECT * FROM SendPatterns
WHERE UnusedFlag = 0
ORDER BY PatternName";
// 実装...
}

public void LogicalDelete(string patternId)
{
string sql = @"
UPDATE SendPatterns
SET UnusedFlag = 1, UpdatedAt = GETDATE()
WHERE PatternId = @PatternId";
// 実装...
}
DTO (Data Transfer Object)
public class SendPatternDto
{
public string PatternId { get; set; }
public string PatternName { get; set; }
public string Description { get; set; }
public bool UnusedFlag { get; set; } // 追加
public DateTime CreatedAt { get; set; }
public DateTime UpdatedAt { get; set; }
}

2. CustomerMaster関連

DAO (Data Access Object)
public List<CustomerMasterDto> GetActiveCustomers()
{
string sql = @"
SELECT * FROM CustomerMaster
WHERE UnusedFlag = 0
ORDER BY CustomerName";
// 実装...
}

public void LogicalDelete(string customerId)
{
string sql = @"
UPDATE CustomerMaster
SET UnusedFlag = 1, UpdatedAt = GETDATE()
WHERE CustomerId = @CustomerId";
// 実装...
}
DTO (Data Transfer Object)
public class CustomerMasterDto
{
public string CustomerId { get; set; }
public string CustomerName { get; set; }
public string CustomerCode { get; set; }
public string Email { get; set; }
public bool UnusedFlag { get; set; } // 追加
public DateTime CreatedAt { get; set; }
public DateTime UpdatedAt { get; set; }
}

更新日