[EMAIL PROTECTED] wrote on 07/07/2005 11:22:52 AM:

> Dear list:
> I am preparing an entity relationship diagram and encountered the 
> following problem:
> The entity "individual" has the attributes firstname, lastname.
> The entity "company" has the attributes name, companytype.
> Now I wish to include the subtype "customer" with the attributes 
> taxid, billingaddress. However, a customer may be either an 
> individual or a company, and I understand that a subtype can only 
> have one supertype.
> (I cannot put "customer" as the supertype because there are many 
> individuals and companies that are not customers.)
> 
> How can I implement the subentity "customer" in my ERD?
> Can I do it at all?
> Thank you
> 
> Alberto Brea
> 

What would be wrong with using the same information for "company" as you 
have for "individual" (a "company" of one). Technically (even though they 
are the same physical being) they are two different logical entities in 
relationship to your system. If you define a "customer" as a business 
entity, "company", with which you have some relationship then people need 
to impersonate companies in order to form that relationship. "Individuals" 
are distinguished by the fact that they are members of a "company" and you 
do not have direct business with them but rather with their parent entity, 
the "company" by way of the "customer" object. For the case of direct 
consumer purchases, the "company" and "individual" records would be 
identical.

Another option is to have "customer" become the supertype and you derive 
two subtypes "company" and "individual". The qualification would be at the 
"customer" level of whether they are a current, future (contact), or past 
customer...  It's a change of perspective and focuses on the business 
relationship and the entities that share that relationship rather than the 
entities and what relationship you have with them.

Last idea: Expand your idea of "company" and "individual" so that they fit 
on the same table "entity" (or whatever works in your naming model. Then 
you could use an attribute on the table to distinguish between public and 
corporate customers.  I like this idea least as it muddles two distinct 
entities into one.

So my suggestions summed up:
a) Make "individuals" also their own "companies"
b) Modify your entity diagram so that both "companies" and "individuals" 
become subtypes of "customer"
c) Change your design so that "companies" and "individuals" are subtypes 
of a common "entity". Create your customer relationships to that common 
parent.

I am sure there will be dozens of other suggestions coming in from others 
on the list...(hint hint!)

Shawn Green
Database Administrator
Unimin Corporation - Spruce Pine

Reply via email to