1

私はRuby on Railsで作業していますが、この質問は一般的にアプリケーション/データベースモデルの設計に当てはまります。私は、User(ログインできる人)、Employee、Customerなど、多くのタイプの人物をモデル化したいと思っています。これらのそれぞれには、Personスーパークラスの一部でなければならない名前や電子メールなどの共通の属性があります。各タイプには、他のより具体的な属性もあります。人は、これらの役割の1つまたは複数になることができます(誰かが従業員と顧客の両方になることができます)。Railsサブクラスと異なる役割を持つPersonモデル

コードでは、適切な構造はスーパークラスとサブクラスの関係のように見えますが、データベースの正規化の観点からは、共通表記のPerson表を参照するCustomer表が必要です。

これらの2つのアプローチを組み合わせる方法を決定する必要があります。

たとえば、顧客をCustomer.create(name: “Johnny Appleseed”, favorite_product: widget)とクエリEmployee.where(email: “[email protected]”)で作成し、すべてのロールモデルで人物フィールドが重複しないようにしたいとします。そうすれば、同じ変更で他のすべてのテーブルを更新することなくPersonをモデル化する方法を変更できます。

+0

お客様は、顧客と従業員と同じ人になりますか?私はあなたが本当に1つのテーブルを持っていると思います。どちらの人が従業員、顧客、またはその両方であるかを示す方法があります。 –

+0

"適切な構造がスーパークラス/サブクラス関係のように見える"と言うとき、 'Role' <' Person'を考えていますか? – jvillian

答えて