I'd alter your suggestion a bit - if a game always two and only two teams,
then assuming it is like baseball or soccer or football, you'd have two
teams, a 'home' team and an 'away' team. So, there would be a 1-1 mapping,
not a 1-many.
On Monday, October 1, 2012 1:46:38 AM UTC-7, Cliff Kachinske wrote:
>
> Do not let your tables proliferate this way.
>
> You need a teams table, even if it contains only the team name or some
> other identifier.
>
> You need a games table.
>
> You need to relate these two. One game has multiple teams, I suppose, so
> that makes a one-to-many relationship.
>
> If the same team can participate in more than one game, you need a many to
> many relationship.
>
> The DAL chapter in the Web2py manual explains how to implement these.
>
> Next you add a game_id field to both your offers and decisions tables.
> That ties these events to the game. Alternatively you could simply call
> the field 'game', assuming you can remember that it contains the record id
> of the game in question.
>
> You also need to add a team_id field to these tables. That ties each
> record to the team involved.
>
> This data structure will allow you to select records for each game, for
> each team in a game. If the teams persist, you can also select all the
> records related to the team.
>
> On Sunday, September 30, 2012 5:31:50 PM UTC-4, curiouslearn wrote:
>>
>> Hello,
>>
>> This is a question about recommended practice for doing the following:
>>
>> I want to create a web interface for creating a setup for new games. For
>> example, the web interface will let me specify
>> name of the game, number of teams etc. Based on this information I want
>> to create new database tables for the game.
>> Should the table definitions be given in a controller function, such as
>> in the example below? Is that the recommended way
>> to do this, or is there another way that you would recommend.
>>
>> Thank you.
>>
>> ***Controller function for creating tables***
>>
>> def createtables():
>> if request.post_vars:
>> experimentname = request.post_vars.experimentname
>> numteams = int(float(request.post_vars.numteams))
>> teams_tablename = "{0}_teams".format(experimentname)
>> offers_tablename = "{0}_offers".format(experimentname)
>> ardecisions_tablename = "{0}_ardecisions".format(experimentname)
>> migrate_teamstablename = "{0}.table".format(teams_tablename)
>> migrate_offerstablename = "{0}.table".format(offers_tablename)
>> migrate_ardecisionstablename = "{0}.table".format(
>> ardecisions_tablename)
>> db.define_table(teams_tablename,
>> Field('teamname', 'string', length=40, required=True,
>> unique=True, notnull=True),
>> Field('passwd', 'password'),
>> Field('role', 'string', length=20, required=True,
>> default='NA'),
>> format = '%(teamname)s', migrate=migrate_teamstablename)
>> # Table showing the ask amount of the first mover
>> referencestring = 'reference {0}'.format(teams_tablename)
>> db.define_table(offers_tablename,
>> Field('round', 'integer'),
>> Field('askamount', 'integer'),
>> Field('payoff', 'integer'),
>> Field('teamname_id', referencestring),
>> migrate = migrate_offerstablename)
>>
>>
>> # Table accept-reject decisions
>> db.define_table(ardecisions_tablename,
>> Field('round', 'integer'),
>> Field('acceptorreject', 'string', length=2),
>> Field('payoff', 'integer'),
>> Field('teamname_id', referencestring),
>> Field('offerer_id', referencestring),
>> migrate = migrate_ardecisionstablename)
>>
>>
>> teamnames = maketeamnames(numteams)
>> for tname in teamnames:
>> db[teams_tablename].update_or_insert(teamname=tname)
>> db.experimentlist.insert(experimentname=experimentname)
>> return dict()
>>
>>
>>
>>
--