Google app engine 数据存储中的数据建模
我刚开始使用数据存储,所以有几件事我还不确定 我有休闲实体:Google app engine 数据存储中的数据建模,google-app-engine,go,Google App Engine,Go,我刚开始使用数据存储,所以有几件事我还不确定 我有休闲实体: 属性:{ID,number,name,long,lat} 地址:{name,postCodeType} 城市:{name} 国家:{name} 用户:{name,username} 因此,这背后的逻辑是用户将拥有多个属性,这意味着属性将持有用户密钥 如上所述,属性有一些属性,但我不确定如何关联地址城市和国家 我认为解决方案是将这3个实体的键存储在属性实体中 type Property struct { ID
属性:
{ID,number,name,long,lat}
地址:
{name,postCodeType}
城市:
{name}
国家:
{name}
用户:
{name,username}
因此,这背后的逻辑是用户
将拥有多个属性
,这意味着属性
将持有用户密钥
如上所述,属性
有一些属性,但我不确定如何关联地址
城市
和国家
我认为解决方案是将这3个实体的键存储在属性实体中
type Property struct {
ID int64 `json:"id" datastore:"-"`
Number int8 `json:"number"`
Name string `json:"name"`
Long float64 `json:"long"`
Lat float64 `json:"lat"`
AddressKey *datastore.Key
CityKey *datastore.Key
CountryKey *datastore.Key
UserKey *datastore.Key
CreatedAt time.Time
}
我从上面的尝试是一个好的开始,还是我需要做些不同的事情
国家列表很少更改,因此大多数程序员使用enum(或Goland等效项)来表示国家,而不是在数据存储中创建实体。您可以使用两个字母或三个字母的国家/地区代码,只需将国家/地区代码保存为地址实体中的字符串属性即可。枚举还可以基于国家代码返回国家的完整显示名称
我也不认为有理由为城市创建一个实体,尽管这是可以做到的,如果真的有必要的话。通常,城市保存为字符串属性,必要时在地址实体中建立索引
这意味着您的地址实体可能看起来像:
Address: {name, street, city, country, postCode}
进一步说,如果每个属性只有一个地址,您可能根本不需要地址实体。这就引出了一个非常简单的解决方案:
type Property struct {
ID int64 `json:"id" datastore:"-"`
Number int8 `json:"number"`
Name string `json:"name"`
Long float64 `json:"long"`
Lat float64 `json:"lat"`
Street string `json:"street"`
City string `json:"city"`
Country string `json:"country"`
PostCode string `json:"postCode"`
UserKey *datastore.Key
CreatedAt time.Time
}
国家列表很少更改,因此大多数程序员使用enum(或Goland等效项)来表示国家,而不是在数据存储中创建实体。您可以使用两个字母或三个字母的国家/地区代码,只需将国家/地区代码保存为地址实体中的字符串属性即可。枚举还可以基于国家代码返回国家的完整显示名称
我也不认为有理由为城市创建一个实体,尽管这是可以做到的,如果真的有必要的话。通常,城市保存为字符串属性,必要时在地址实体中建立索引
这意味着您的地址实体可能看起来像:
Address: {name, street, city, country, postCode}
进一步说,如果每个属性只有一个地址,您可能根本不需要地址实体。这就引出了一个非常简单的解决方案:
type Property struct {
ID int64 `json:"id" datastore:"-"`
Number int8 `json:"number"`
Name string `json:"name"`
Long float64 `json:"long"`
Lat float64 `json:"lat"`
Street string `json:"street"`
City string `json:"city"`
Country string `json:"country"`
PostCode string `json:"postCode"`
UserKey *datastore.Key
CreatedAt time.Time
}
国家列表很少更改,因此大多数程序员使用enum(或Goland等效项)来表示国家,而不是在数据存储中创建实体。您可以使用两个字母或三个字母的国家/地区代码,只需将国家/地区代码保存为地址实体中的字符串属性即可。枚举还可以基于国家代码返回国家的完整显示名称
我也不认为有理由为城市创建一个实体,尽管这是可以做到的,如果真的有必要的话。通常,城市保存为字符串属性,必要时在地址实体中建立索引
这意味着您的地址实体可能看起来像:
Address: {name, street, city, country, postCode}
进一步说,如果每个属性只有一个地址,您可能根本不需要地址实体。这就引出了一个非常简单的解决方案:
type Property struct {
ID int64 `json:"id" datastore:"-"`
Number int8 `json:"number"`
Name string `json:"name"`
Long float64 `json:"long"`
Lat float64 `json:"lat"`
Street string `json:"street"`
City string `json:"city"`
Country string `json:"country"`
PostCode string `json:"postCode"`
UserKey *datastore.Key
CreatedAt time.Time
}
国家列表很少更改,因此大多数程序员使用enum(或Goland等效项)来表示国家,而不是在数据存储中创建实体。您可以使用两个字母或三个字母的国家/地区代码,只需将国家/地区代码保存为地址实体中的字符串属性即可。枚举还可以基于国家代码返回国家的完整显示名称
我也不认为有理由为城市创建一个实体,尽管这是可以做到的,如果真的有必要的话。通常,城市保存为字符串属性,必要时在地址实体中建立索引
这意味着您的地址实体可能看起来像:
Address: {name, street, city, country, postCode}
进一步说,如果每个属性只有一个地址,您可能根本不需要地址实体。这就引出了一个非常简单的解决方案:
type Property struct {
ID int64 `json:"id" datastore:"-"`
Number int8 `json:"number"`
Name string `json:"name"`
Long float64 `json:"long"`
Lat float64 `json:"lat"`
Street string `json:"street"`
City string `json:"city"`
Country string `json:"country"`
PostCode string `json:"postCode"`
UserKey *datastore.Key
CreatedAt time.Time
}