私はプログラミングが初めてで、GAE データストアの概念を理解しようとしています。契約を簡単に書けるようにするアプリを構築しようとしています (http://contractpy.appspot.com)。知りたいのは、契約を記録するデータベースをモデル化する方法です (契約には複数の人がいる可能性があることを考慮して)トランザクションの同じ側で)?
リレーショナル モデルでは、次のことを行います。人用のテーブルを作成し、次に契約用のテーブルを作成し、その契約に参加した人を参照する 3 つ目のテーブルを作成します。次のようになります(私は推測します):
CREATE TABLE people(
id INTEGER(8) NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(250) NOT NULL,
profession VARCHAR(30),
driverLicense VARCHAR(12),
address VACHAR(60)
)ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE TABLE contracts(
idContract INTEGER(7) NOT NULL AUTO_INCREMENT PRIMARY KEY,
contractType VACHAR(12), # purchase contract, rental contract etc.
contractDate DATE,
place VACHAR(12),
)ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE TABLE contractingParties(
FK_id INTEGER(7) NOT NULL FOREIGN KEY(FK_id) references people(id),
FK_idContract INTEGER(7) NOT NULL FOREIGN KEY(FK_idContract) references contracts(idContract),
condition VACHAR(12), # e.g., buyer, seller, renter, owner etc.
)ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;
私の質問は、GAE データストアでこれを行う最善の方法は何ですか? 以下にスケッチを書きましたが、これが GAE データストアの非リレーショナル コンセプトを使用した正しい考え方であるかどうかはわかりません。
Python 2.7 で GAE を使用しています。
ヘルプ/アドバイスをよろしくお願いします!
class People(db.Model):
name = db.StringProperty(required = True)
profession = db.StringProperty(required = True)
driverLicense = db.IntegerProperty(required = True)
address = db.PostalAdressProperty(required = True)
class Contracts(db.Model):
idContract = db.IntegerProperty(required = True)
contractType = db.StringProperty(required = True, choices=set(["Purchase Agreement", "Rental House", "Rental Car"]))
contractDate = db.DateProperty (required = True, auto_now = True, auto_now_add = True)
place = db.StringProperty(required = True)
parties = db.ReferenceProperty(ContractingParties, required = True)
class ContractingParties(db.Model):
person = db.ReferenceProperty(People, required=True)
contract = db.ReferenceProperty(Contracts, required=True)
condition = db.StringProperty(required = False, choices=set(["buyer", "seller", "renter", "owner", "witness"]))