Need advice on structure of my database, to create useful Entities

I need people's advice as to whether this the best way to achieve what I want. Apologies in advance if this is a little to subjective.

I want to use Entity Framework V.1 to create something similar to the following C# classes:

abstract class User 
   public int UserId;
   public string TelephoneNumber;

class Teacher : User 
   public string FavorateNewspaper; 

class Pupil : User 
   public string FavorateCartoon; 

I need people's advice as to how to best to persist this information.

I plan to use SQL Server and the normal Membership Provider. It will create for me a table called aspnet_Users. There will be two roles: Teacher and Pupil.

I will add fields to the table aspnet_Users which are common to both roles. Then create tbl_Teachers and tbl_Pupils to hold information specific to one role.

So My database will look a bit like this:

    int UserId
    varchar TelephoneNumber

    int UserId
    varchar FavorateNewspaper

    int UserId
    varchar FavorateCartoon

The idea of course being that I can match up the data in aspnet_Users to that in either tbl_Teachers or tbl_Pupils by joining on UserId.

So to summarise, my questions are:

Is my database structure the best option to achieve these classes?

Should I try to wrap the Entities within my own POCO classes?

Should I change my database structure so that EF creates entities which are closer to the classes I want?

EDIT: I re-arranged my question it make it a bit clearer what I'm asking.


If you're using EF 1, then POCO can be a bit unpleasant. Unless there's a good reason not to, I'd just use normal EF entities. Your database model is fine, by the way, and is an example of TPT (Table Per Type) inheritance mapping. You could either use the wizard to create entites from the databaes, or create your entites and map them to the associated tables. If you do the former you'd initially end up with three unrelated entities. You'd then use the designer to tell EF that Pupil and Teacher inherit from User, and that User is abstract.

In general, one of the strengths of EF is that the entities don't have to match that closely to the tables that persist them. In this case though there's a natural mapping.

Need Your Help

What are the basic algorithms for text mining?

nlp information-retrieval text-mining

I'm trying to do an application for mining some texts from the web, but I'm not sure of what is the best way to perform text mining.