2017-09-06 8 views
0

私は金融取引プラットフォームで作業しています。データベース設計 - 異なる属性を持つ同じエンティティ

送信者は、常に特定の属性を持つ登録ユーザーです。

受信者は、既にプラットフォームに登録されているユーザー(同じ属性を持つユーザー)またはプラットフォーム外のユーザー(その場合、銀行口座の詳細を別のテーブルに保存する必要があります)です。

私が抱えている問題は、受信者の識別に役立つ外部キーを持つことです。

まず、1つの外部キーが複数のテーブルを参照できないことがわかっているので、両方のnull可能で、両方のタイプのユーザーを参照する2つの外部キーをトランザクションテーブルに追加しました。

このようにして、少なくとも1つの外部キーには値があり、どのタイプのユーザーが受信者であるかを識別するのに役立ちます。

これを実行するより良い方法はありますか?

+0

ご覧ください: https://stackoverflow.com/search?tab=votes&q=user%3a196713%20subtype –

+0

@DamirSudarevic大したことはありませんでした。重複している質問があれば教えてください。 –

+0

@DamirSudarevic私の場合、共通の属性はありませんので、スーパー/サブタイプパターンを使用すると、私のusersテーブルはid属性しか持たなくなります。 –

答えて

0

これをより安全に行うには、ユーザーテーブルを、登録ユーザーと登録ユーザーの両方のレコードを含む単一のテーブルに結合することが重要です。取引テーブルには、受信者用の外部キーが1つしかありません。

ユーザーが登録されているかどうかに応じて異なるフィールドを除外する必要があります。 usersは、registered_profilesunregistered_profilesテーブルへの二重外部キーを含むことになります。しかし、これは、ユーザが両方のアカウントを持っている場合は常に登録されたプロファイルを優先することがわかっているので、transactionsテーブルの二重外部キーよりもはるかに信頼性があります。

一般的に、不確実性の範囲をできるだけ制限したいと考えています。受信者が登録されているか登録されていないかは、取引に関係なく、ユーザーにとって重要なものである必要はありません。

+0

私に例を挙げてもらえますか?私のケースでは、登録ユーザーと未登録ユーザーの共通属性はないので、スーパータイプ/サブタイプパターンと思われる提案に従うと、users表にはid属性しか持たないことに注意してください。私が言ったように、私に実際のデザインの例を教えてください。 –

関連する問題