class Entity(Base):
    '''A base for entities.'''
    
    __tablename__ = 'entities'
    
    id = Column(Integer, Sequence('entity_id_seq'), primary_key=True)
    type = Column(String(50))
    
    tax_id = Column(String(20))
    
    memberships = relationship('Membership')
    
    __mapper_args__ = {
        'polymorphic_identity': 'entity',
        'polymorphic_on': type}

class Person(Entity):
    '''A person.'''
    
    __tablename__ = 'people'
    
    id = Column(Integer, ForeignKey('entities.id'), primary_key=True)
    
    first_name = Column(String(50))
    middle_name = Column(String(50))
    last_name = Column(String(50))
    
    date_of_birth = Column(Date)
    date_of_death = Column(Date)
    
    relationships = relationship('Relationship', 
foreign_keys='relationships.c.source_id')

class Relationship(Base):
    '''A relationship.'''
    
    __tablename__ = 'relationships'
    
    source_id = Column(Integer, ForeignKey('people.id'), primary_key=True)
    target_id = Column(Integer, ForeignKey('people.id'), primary_key=True)
    relationship_type_id = Column(Integer, 
ForeignKey('relationship_types.id'), primary_key=True)
    
    from_date = Column(Date)
    thru_date = Column(Date)
    
    notes = Column(Text)
    
    source = relationship('Person', foreign_keys=source_id)
    target = relationship('Person', foreign_keys=target_id)
    relationship_type = relationship('RelationshipType', 
foreign_keys=relationship_type_id)

class RelationshipType(Base):
    '''A relationship type.'''
    
    __tablename__ = 'relationship_types'
    
    id = Column(Integer, Sequence('relationship_type_id_seq'), 
primary_key=True)
    
    description = Column(String(50))

>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to