私はGoogleAppEngineでdjangononrel/djangoappengineを使用しています。複合主キーを直接指定することはできません。ただし、この動作をエミュレートすることは可能です。最善のアプローチは何か疑問に思っています。
問題
次のデータモデルを検討してください
class AccumuatedSales(models.Model):
salesman = models.ForeignKey(Salesman)
year = models.Postiveinteger()
totalSales = models.PositiveInteger()
(セールスマン、年)を主キーとして扱いたい。つまり、私がそうするなら
asby1 = AccumulatedSales(salesman='Joe', year=2010, totalSales=100)
asby1.save()
asby2 = AccumulatedSales(salesman='Joe', year=2010, totalSales=200)
asby2.save()
'テーブル'AccumulatedSalesには1つの行が含まれている必要があります。したがって、2回目の保存で最初の保存が上書きされます。
考えられる解決策
class AccumuatedSales(models.Model):
key = models.CharField(primary_key=True,, default=None, editable=False)
salesman = models.ForeignKey(Salesman)
year = models.Postiveinteger()
totalSales = models.PositiveInteger()
def save(self):
self.key = someHashFunction(self.salesman_id, self.year)
super(AccumulatedSales, self).save()
質問
- このアプローチは良いですか、それとも「正しいアプローチ」ですか?
- フィールドキーに最適なデータ型は何ですか?個人的には128ビットフィールドが欲しいのですが、私の知る限りでは利用できません。