2016-12-14 15 views
1

私は実稼働環境にデータベースを持ち、2種類のユーザーがあります。 Uberと同様に、ライダーとドライバーもいます。データベースのユーザーは2種類ありますが、どのようにデータベースを再設計できますか?

私のデータベースには、Users、Rider、およびDriverテーブルがあります。 Userテーブルには、2つのユーザタイプ間の共有データが含まれ、DriverテーブルとRiderテーブルには残りのデータが含まれます。

データベースが元々設計されていたときに、ドライバがライダーであることも望んでいないとは考えられませんでした。このユースケースはどのようになって発生しましたか、データベーステーブルをどのように扱うかは不明です。

現在、email_addressフィールドには固有の制約があります。ユーザーには、ライダーまたはドライバーのuser_typeフィールドもあります。

私の現在の考えは、email_addressの一意性制約を削除し、email_addressとuser_typeに一意のインデックスを作成して、ユーザーがアプリケーションの両面を使用できるようにすることです。

これは、たとえば、呼び出し/ログイン時にどのタイプのユーザーが作業されているかを指定する必要があるという問題を引き起こします。私は今、/ login?type = riderのようなことをする必要があると思う。

もっと良いアプローチがありますか?私たちは生産段階にありますので、スクラップや再作成はできませんが、より良いソリューションがあればデータを移行することができます。

+1

これは混乱のように聞こえる。私はすべてのユーザーのための1つのテーブルを持っているだろうし、ユーザーの役割のための2番目のテーブルを持っています。その表の各レコードには、ユーザーIDと役割IDがあります。ライダーとドライバーのユーザーの場合、1人のユーザーの役割に2つのエントリーがあります。 –

+0

@TimBiegeleisen迅速な返信をありがとう。また、ユーザタイプには追加のフィールドがあります。 number_of_trips_takenは 'ライダー'に適用されますが、 'ドライバー'には適用されません。 –

+0

外部キーがユーザーIDであるライターのメタデータテーブルを作成します。ユーザーがこのテーブルに参加しない場合は、ドライバではないとして無視します。 –

答えて

0

私の提案はコメントには大きすぎますので、私の意見を聞いてください。 アプリケーションでこれらのテーブルをどのように使用しているか分かりませんので、正確な解決策はありません。したがって、このソリューションはいくつかの前提で設計されています。

ログイン時に、ユーザーがドライバまたはライダーとしてログオンするかどうかを決定する必要があります。通常、ドライバのリンクは、ユーザーのリンクとは異なる必要があります。またはフラグが必要です。

ライダーにとっては、追加の検証は必要ありません。しかし、誰もがドライバとしてログインすることを許可されるべきではない(例えば、誤ってユーザがドライバとしてログオンしようとすると、システムはそれを許さない)。

つまり、初期のユーザーテーブルとドライバテーブルは変更する必要はありません。あなたがドライバーでない場合、ユーザーロールはデフォルトでライダーになります。 ライダーとしてライダーとしてログインしている場合、変更は必要ありません。 私はあなたのコードベースのどこかに役割設定メカニズムがあると仮定しています。

しかし、ドライバーとしてログインしているドライバーの場合、既存のロジックはこの追加のフラグを続ける必要があります。つまり、フラグがコードに存在するかどうかを確認してから、テーブル内のドライバーを確認する必要があります。あなたがライダーとして入ってくるドライバーなら、フラッグはノーとしなければならない。

これで2つのオプションがあります。まず、ドライバーがドライバーテーブルからのみライダーデータとして入って来るようにして、もう1つはライダーテーブルにエントリを作成して使用することです。両方のアプローチが機能します(適切なテーブルに到達するには、フラグに基づいてアプリケーションロジックを微調整する必要があります)。私の提案は、ライダーのテーブルに行くことです、それはシステムのさらなる複雑さを減らすはずです。だから、基本的には、ドライバーとライダーの間でドライバやライダーの両方のテーブルにエントリがある必要があり(ユーザーのテーブルのみに制約があると仮定して)、ユーザーがロギングしている役割に基づいて正しいエントリを使用する必要がありますうまくいけば、いったん正しいテーブルを使ってログインすれば、システムへの変更は最小限に抑えられます。

関連する問題