when you have CharacterEntity, would there also be
MonsterCharacterEntity, FaunaCharacterEntity, etc. ?  if you had
"Monster", "Fauna", "Race", "Foliage" mixins that are applied to the
LivingEntity hierarchy that would be a place to hold your
"species_lookup" relationship.  What is the base of the hierarchy of
RaceLookup/MonsterLookup/FaunaLookup/FoliageLookup?  there should be
some common term for that too like TaxonomyLookup or something.  since
we are heavy with entity terminology here.

On Thu, Apr 5, 2018 at 8:52 AM, Johnathan Norton
<ancientradiostat...@gmail.com> wrote:
> 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.

-- 
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