Hello Friends,
I am trying to define relationship between real-world entities in my
application… But I am feel, I am over-representing it a little and
hence would like your opinion.
class User < ActiveRecord::Base
has_and_belongs_to_many :user_groups
attr_accessible :username, :email, :password, :password_confirmation
end
class Customer < User
has_many :orders
belongs_to :person
end
class Employee < User
belongs_to :person
end
class Person < ActiveRecord::Base
has_many :addresses
end
Should I merge User and Person Models? Basically user has only login
information while Person has details like first_name, last_name, address
and so on…
Also, should Customer and Employee inherit from Person or User? Trying
to normalize stuff but dont want to over-normalize it too…
Thank you.
On 29 March 2010 10:43, Paritian T. [email protected] wrote:
end
class Person < ActiveRecord::Base
has_many :addresses
end
Should I merge User and Person Models? Basically user has only login
information while Person has details like first_name, last_name, address
and so on…
Yes, why complicate matters.
Have you considered that a user might be both a customer and an
employee? Your model would preclude that I think. Are you sure it
would not be better just to have the user model who can be either or
both just by attribute contents?
Colin
I think the differences between Customer and Employee is Role, when you
assign a ‘customer’ role, he is a customer.
So you could use Role to distinguish different person, and a person may
have
many roles
class User < ActiveRecord::Base
has_many :roles
has_many :addresses
end
Colin L. wrote:
Yes, why complicate matters.
Have you considered that a user might be both a customer and an
employee? Your model would preclude that I think. Are you sure it
would not be better just to have the user model who can be either or
both just by attribute contents?
Colin
Valid point
I do not want to combine Customer and Employee tables because they have
quite different attributes…
Employee has department, manager, roles etc…
Customer has current status, credit card info etc… bunch of stuff I
will collect on registration… If I combine them, the resulting table
will be a little too huge…
On 29 March 2010 11:23, Paritian T. [email protected] wrote:
Valid point
I do not want to combine Customer and Employee tables because they have
quite different attributes…
Employee has department, manager, roles etc…
Customer has current status, credit card info etc… bunch of stuff I
will collect on registration… If I combine them, the resulting table
will be a little too huge…
Assuming you plan to use STI for the tables then the table contains
all the attributes for both anyway. Presumably most of the stuff is
varchar which are variable length fields. so consume very little
space. How many million customers are you expecting so that db size
becomes a factor?
Colin