I wasnt looking to use the monster,race,foliage, and fauna classes as
mixins for the character ones. There's not a monster, or fauna stat that i
want to add on to a character object.

Didnt realize this is what I'm trying to do until you asked the right
questions.

I guess I'm trying to make it like this:
- Entity heirarcy is supposed to be used for mechanics of combat, and
information about specific characters/bosses/players.
- Species hierarcy is supposed to be more of a lore storage table.
Information pertaining to a specific bread of monster, fauna, race etc... I
could easily put all the species in one table and do a simple 1:M, but the
monsters will probably need more columns than the foilage table, and that
will waste space.
- The relationship i need is to basically hop straight from a specific
character to the lore entry about its species.

There currently is no base of those species classes. SpeciesLookup()was
performing that function until I changed it to just be a mapping of ids to
the table names. But making a base class for them is a good idea, so I'll
try it out next time I'm at my computer.

Thanks a bunch, man. Ur youtube vid and pdf handout with the tutorial
really kick started me into this. Im lovin it.

On Thu, Apr 5, 2018, 08:45 Mike Bayer <mike...@zzzcomputing.com> wrote:

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

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