私は実稼働環境にデータベースを持ち、2種類のユーザーがあります。 Uberと同様に、ライダーとドライバーもいます。データベースのユーザーは2種類ありますが、どのようにデータベースを再設計できますか?
私のデータベースには、Users、Rider、およびDriverテーブルがあります。 Userテーブルには、2つのユーザタイプ間の共有データが含まれ、DriverテーブルとRiderテーブルには残りのデータが含まれます。
データベースが元々設計されていたときに、ドライバがライダーであることも望んでいないとは考えられませんでした。このユースケースはどのようになって発生しましたか、データベーステーブルをどのように扱うかは不明です。
現在、email_addressフィールドには固有の制約があります。ユーザーには、ライダーまたはドライバーのuser_typeフィールドもあります。
私の現在の考えは、email_addressの一意性制約を削除し、email_addressとuser_typeに一意のインデックスを作成して、ユーザーがアプリケーションの両面を使用できるようにすることです。
これは、たとえば、呼び出し/ログイン時にどのタイプのユーザーが作業されているかを指定する必要があるという問題を引き起こします。私は今、/ login?type = riderのようなことをする必要があると思う。
もっと良いアプローチがありますか?私たちは生産段階にありますので、スクラップや再作成はできませんが、より良いソリューションがあればデータを移行することができます。
これは混乱のように聞こえる。私はすべてのユーザーのための1つのテーブルを持っているだろうし、ユーザーの役割のための2番目のテーブルを持っています。その表の各レコードには、ユーザーIDと役割IDがあります。ライダーとドライバーのユーザーの場合、1人のユーザーの役割に2つのエントリーがあります。 –
@TimBiegeleisen迅速な返信をありがとう。また、ユーザタイプには追加のフィールドがあります。 number_of_trips_takenは 'ライダー'に適用されますが、 'ドライバー'には適用されません。 –
外部キーがユーザーIDであるライターのメタデータテーブルを作成します。ユーザーがこのテーブルに参加しない場合は、ドライバではないとして無視します。 –