Google app engine 在google app engine上创建复合键或复合键

Google app engine 在google app engine上创建复合键或复合键,google-app-engine,composite-key,app-engine-ndb,compound-key,entity-groups,Google App Engine,Composite Key,App Engine Ndb,Compound Key,Entity Groups,我有两种型号: Car(ndb.Model)和Branch(ndb.Model)各有一个关键方法 @classmethod def car_key(cls, company_name, car_registration_id): if not (company_name.isalnum() and car_registration_id.isalnum()): raise ValueError("Company & car_registration_id must

我有两种型号: Car(ndb.Model)和Branch(ndb.Model)各有一个关键方法

@classmethod
def car_key(cls, company_name, car_registration_id):
    if not (company_name.isalnum() and car_registration_id.isalnum()):
        raise ValueError("Company & car_registration_id must be alphanumeric")
    key_name = company_name + "-" + car_registration_id
    return ndb.Key("Car", key_name)
分支键:

@classmethod
def branch_key(cls, company_name, branch_name):
    if not (company_name.isalnum() and branch_name.isalnum()):
        raise ValueError("Company & Branch names must be alphanumeric")
    key_name = company_name + "-" + branch_name
    return ndb.Key("Branch", key_name)
但是我觉得这有点难看,而且不是你应该如何使用钥匙

(汽车登记是汽车独有的,但有时一家公司可能会将汽车出售给另一家公司,汽车也会在分支机构之间移动)

由于一家公司可能有许多汽车或分支机构,我想我不需要大型实体组,因为您每秒只能向实体组写入一次

我应该如何定义我的密钥

e、 g.我正在考虑
car\u key=ndb.key(“car”,car\u reg\u id,“Company”,Company\u name)
因为汽车不太可能有很多公司,所以实体集团不会太大


但是,我不确定如何处理分支机构密钥,因为许多公司可能具有相同的分支机构名称,而许多分支机构可能具有相同的公司。

您正确地确定了GAE中的祖先关系不应基于数据的逻辑结构

它们需要基于应用程序的事务行为。祖先使你的生活困难。例如,一旦使用复合键,除非您碰巧知道该键的所有元素,否则将无法按键获取该实体。如果您知道汽车id,那么在不知道其他部件的情况下将无法获取它

考虑哪些查询需要具有很强的一致性。如果在给定分支中查询所有车辆时确实需要强一致性,那么您应该考虑使用它作为祖先。

考虑在事务中需要执行哪些操作,这是使用实体组的另一个很好的理由

请记住,您可能根本不需要任何实体组(可能是针对您的情况的答案)


或者,另一方面,您可能需要一个实体组,该实体组可能不完全适合任何逻辑概念模型,但祖先可能是一个纯粹为了存在而存在的实体,因为您需要某个事务的祖先。

谢谢。我始终知道与登录用户帐户关联的公司名称和分支机构名称。因此,我认为我将保持键的原样(两个字符串中间用“-”连接)。我将为每个分支创建一个汽车注册ID列表。这将提供一种查看相关车辆的方法,然后单击“编辑车辆”,该车辆将获得注册id。