Я новичок в программировании и пытаюсь понять концепцию хранилища данных GAE. Я пытаюсь создать приложение, чтобы упростить запись контрактов (http://contractpy.appspot.com), и я хотел бы знать: как смоделировать базу данных для записи контрактов (учитывая, что контракт может иметь несколько человек на одной стороне сделки)?
В реляционной модели я бы сделал следующее: создал таблицу для людей, затем таблицу для контракта и третью таблицу со ссылкой на людей, которые участвовали в этом контракте. Это выглядело бы примерно так (я полагаю):
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.
Я использую GAE с Python 2.7.
Заранее благодарим за любую помощь / совет!
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"]))