Disclaimer: I'm very new at this. Only been learning databases for a couple 
weeks, and been working with python for about a month and 1/2. I did do 
several searches, phrasing things differently, but I can't seem to find my 
answer.

I'm trying to build a overly complex DnD database and cmdline program to GM 
with.
Current issue is that I'm playing with a lot of mixin classes, creating new 
tables for more and more complex entities so I'm not having simple 
entities(less columns) waste space in the same table with complex ones(more 
columns).

For instance:
LivingEntity table has current_hp, max_hp, and base_ac columns.
StattedEntity would inherit those from LivingEntity and gain attributes 
that ready it for combat: str, dex, con, etc...

I'm trying to add a piece of functionality to the LivingEntity class that 
gets passed down to its children. I want all children entity tables to have 
two columns.
    - One column is the entity's species type (Foliage, Fauna, Monster, 
Race)
    - The other column takes that type and goes to a table with that type 
in the name, and uses the second column's entry as a foreign key for that 
column.

When I create an entity, I'd like to be able to give a function a string. 
It searches through the fauna, foliage, monster, and race tables for that 
string, and when it finds it, fills in the species_id, and species_type 
columns appropriately.
Finally, I want to be able to query the foliage, fauna, monster, and race 
tables to get general information about trees, deer, beholders, or humans.

Code: (Bolded text is my main focus atm.)

class Entity():
    __tablename__ = 'Entity'

    id
    name
    description
    parent_campaign

class LivingEntity(Entity):
    """Parent class for statted entities. Mainly basic metadata about 
generic living creatures that won't be in combat."""
    __tablename__ = 'LivingEntities'

    @declared_attr
    def species_type(cls):
        return Column('species_type', ForeignKey('SpeciesLookup.name'), 
nullable=False)



*    @declared_attr        def species_id(cls):            
Column('species_id', ForeignKey(f'{species_type}Lookup.id')) #species_type 
is out of scope here, yes?*

    current_hp = Column(Integer, nullable=False)
    max_hp = Column(Integer, nullable=False)
    base_ac = Column(Integer, nullable=False)

    @declared_attr
    def SpeciesLookup(cls):
        return relationship('SpeciesLookup')


*    @declared_attr    def 
I_don't_even_know_how_to_begin_to_define_this_relationship(cls):*
*        return relationship(f'{species_type}Lookup')*


class StattedEntity(LivingEntity):
    """Parent class for monster, character, and player tables. Adds combat 
and hex map functionality."""
    __tablename__ = 'StattedEntity'

    level
    armor_ac_bonus
    init_bonus
    initiative
    speed
    etc...

class SentientEntity():
    """Parent class for any entities needing sentient functionality."""
    __tablename__ = 'SentientEntity'

    alignment
    religion
    behaviors
    current_goal
    fears

class CharacterEntity(StattedEntity, SentientEntity, Base):
    """Holds instances of simple NPCs."""
    profession
    talents
    brief_backstory
    party
    stress
    main_goal

class PlayerEntity(StattedEntity, SentientEntity, Base):
    """Holds instances of player characters."""
    class_id
    backstory_file
    storybook_file
    wis_save
    cha_save
    athletics
    acrobatics
    sleight_of_hand
    stealth
    location
    etc...

class SpeciesLookup(Entity, Base):
    """Lookup table for species types."""
    __tablename__ = 'SpeciesLookup'

class FoliageLookup(Entity, Base):
    """lookup table for all foliage species"""
    __tablename__ = 'FoliageLookup'
    specific_attribute_1
    specific_attribute_3

class FaunaLookup(Entity, Base):
    """Lookup table for all innocent fauna"""
    __tablename__ = 'FaunaLookup'
    specific_attribute_5
    specific_attribute_2

class MonsterLookup(Entity, Base):
    """Lookup table for all monsters, beasts"""
    __tablename__ = 'MonsterLookup'
    specific_attribute_7
    specific_attribute_6

class RaceLookup(Entity, Base):
    """lookup table for all races"""
    __tablename__ = 'RaceLookup'
    specific_attribute_9
    specific_attribute_11

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
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 https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to