0

以下に示すように、2つのテーブルがあります。

トランザクション テーブルは、バイヤーとサプライヤー間の販売イベントを表すテーブルです。表の ... は、TransactionDate、ストア情報などの他の列を表します。

連絡先テーブルは、名前や自宅の住所など、バイヤーとサプライヤーの情報を表すテーブルです。

現在、2 つのテーブルは、BuyerID = ContactID および SellerID = ContactID という 1 対 1 の関係を共有しています。

このテーブルに Python スクリプトを入力しているので、答えは Python、SQL、またはその両方である可能性があります。

現在の状態

取引表

トランザクション ID (pk) ... バイヤーID 販売者ID
11914 11914 バイヤー 11914 売り手
11915 11915 バイヤー 11915 売り手
11916 11916 バイヤー 11916 売り手

連絡表

連絡先 ID (pk) ... ファーストネーム 苗字
11914 バイヤー マイク ドウ
11914 売り手 ジャネット マイヤーズ
11915 バイヤー ジャネット マイヤーズ
11915 売り手 マイク ドウ
11916 バイヤー デイブ ダーク
11916 売り手 ジャネット マイヤーズ

私がしたいのは、連絡先テーブルの繰り返し行を削除し、テーブルの関係を 1 対多にすることです。さらに、たとえば Janet Myers が姓を変更した場合、他のすべての列が同じままであっても、Contact テーブルに新たに追加されます。つまり、ContactID 列を無視すると、ContactTable に 2 つの同一の行があってはなりません。

将来の状態

取引表

トランザクション ID (pk) ... バイヤーID 販売者ID
11914 06dfe636-4408-4abe-b902-b1ac6aab9849 58e5c2f7-d0ef-4129-a5a8-e17efaee0a1d
11915 58e5c2f7-d0ef-4129-a5a8-e17efaee0a1d 06dfe636-4408-4abe-b902-b1ac6aab9849
11916 ab99de1f-a714-4709-9a1e-f3a143b279d2 58e5c2f7-d0ef-4129-a5a8-e17efaee0a1d

連絡表

連絡先 ID (pk) ... ファーストネーム 苗字
06dfe636-4408-4abe-b902-b1ac6aab9849 マイク ドウ
58e5c2f7-d0ef-4129-a5a8-e17efaee0a1d ジャネット マイヤーズ
ab99de1f-a714-4709-9a1e-f3a143b279d2 デイブ ダーク

これを解決するために最初に考えたのは、他のすべての列のハッシュから ContactID を作成することです。

sha256(json.dumps(contactDict.encrypt('utf-8'))).hexdigest()

次にMERGE、ContactID ハッシュがまだテーブルに存在しない場合は、ステートメントを使用して連絡先を追加します。これはうまくいくと思いますが、財務データとのハッシュ衝突の危険を冒すことを考え直しています。

ハッシュ以外に、私の他の考えはMERGEステートメントですが、ON句に約 15 の列があるため、パフォーマンスが非常に低いと思いました。

4

0 に答える 0