2

これはばかげた質問かもしれません

しかし、データベース宣言のどこで間違ったのかを理解するのにまだ苦労しています。

参照とすべてを含む、テーブルを次のように表示するレイアウトは次のとおりです。

http://imgur.com/fpaDb

db.py で使用した web2py コードは次のとおりです。

db.define_table('Course',Field('CallNumber','integer'),Field('Section','string',),Field('Title','string'),Field('MinCredit','integer'),Field('MaxCredit','integer'),Field('MaxEnrollment','integer'),Field('CurrentEnrollment','integer'),Field('Status','string'),Field('Instructor1','string'),Field('Term','string'))
db.define_table('Meeting',Field('CallNumber',db.Course),Field('Day','string'),Field('StartTime','string'),Field('EndTime','string'),Field('Site','string'),Field('Building','string'),Field('Room','string'),Field('Activity','string'))
db.define_table('Requirement',Field('CallNumber',db.Course),Field('Control','string'),Field('Argument','string'),Field('Value1','string'),Field('Operator','string'),Field('Value2','string'))

私がやろうとしているのは、web2py が Course テーブルのエントリに割り当てる任意の ID ではなく、代わりに CallNumber によって、Meeting テーブルと Requirement テーブルが Course テーブルを参照するようにすることです。

どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

2

参照フィールドには、参照されるテーブルの主キーであるフィールドが格納されidます。参照されたレコードの CallNumber 値が必要な場合は、結合時に簡単に取得できます。

db.define_table('Course', Field('CallNumber', 'integer'), ...)
db.define_table('Meeting', Field('Course', db.Course), ...)

row = db(db.Course.id == db.Meeting.Course).select().first()
print row.Course.CallNumber

再帰的な selectを実行することもできます:

row = db(db.Meeting).select().first()
print row.Course.CallNumber

再帰選択は、複数のレコードをループする場合、各レコードに対して個別のデータベース クエリを実行するため、効率が低下することに注意してください。その場合、上記の内部結合方法は、結合されたレコードのセット全体を取得するための 1 つのクエリのみを必要とするため、より効率的です。

于 2013-01-15T14:43:48.200 に答える