英文:
Data modeling in datastore
问题
我刚开始使用Datastore,所以对一些事情还不太确定。
我有以下实体:
Property:
{ID, number, name, long, lat}
Address:
{name, postCodeType}
City:
{name}
Country:
{name}
User:
{name, username}
根据上述描述,User
将拥有多个属性
,这意味着一个属性
将保存一个用户键
。
根据上述描述,Property
有一些属性,但我不确定如何关联address
、city
和country
。
我认为一个解决方案是在property实体
中存储这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
}
我上面的尝试是否是一个好的开始,还是我需要做一些不同的事情?
英文:
I just started using Datastore, so I'm still not sure about few things.
I have the fallowing entities:
Property:
{ID, number, name, long, lat}
Address:
{name, postCodeType}
City:
{name}
Country:
{name}
User:
{name, username}
So the logic behind this is that a User
will have multiple properties
, which means that a property
will hold a user key
.
As described above the Property
has some properties, but I am not sure on how to associate the address
city
and country
.
I think a solution will be to store the keys for those 3 entities in the property entity
.
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
}
Is my attempt from above a good start or what do I need to do different.
答案1
得分: 3
-
国家列表很少改变,所以大多数程序员使用枚举(或类似Goland的东西)来表示国家,而不是在数据存储中创建实体。您可以使用两个字母或三个字母的国家代码,并将国家代码简单地保存为地址实体中的字符串属性。枚举还可以根据代码返回国家的完整显示名称。
-
我也不认为有必要为城市创建实体,尽管如果确实需要的话可以这样做。通常,城市会作为字符串属性保存在地址实体中,如果需要的话进行索引。
这意味着您的地址实体可能如下所示:
Address: {name, street, city, country, postCode}
-
更进一步,如果每个属性只有一个地址,您可能根本不需要地址实体。这将导致一个非常简单的解决方案:
type Property struct {
ID int64json:"id" datastore:"-"
Number int8json:"number"
Name stringjson:"name"
Long float64json:"long"
Lat float64json:"lat"
Street stringjson:"street"
City stringjson:"city"
Country stringjson:"country"
PostCode stringjson:"postCode"
UserKey *datastore.Key
CreatedAt time.Time
}
英文:
-
A list of countries rarely changes, so most programmers use an enum (or a Goland equivalent) to represent countries, instead of creating entities in the datastore. You can use ether 2-letter or 3-letter country codes, and simply save a country code as a string property within an Address entity. The enum can also return a full display name of a country based on its code.
-
I also don't see a reason to create an entity for cities, although it can be done, if really necessary. Usually, a city is saved as a string property, indexed if necessary, within an Address entity.
This means that your Address entity may look like:
Address: {name, street, city, country, postCode}
-
Going further, if each property has only one address, you may not need the Address entity at all. Which leads us to a very simple solution:
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 }
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论