我对数据库的关注度不是很高,如果我不能很好地描述这一点,那就很抱歉......
我有一个现有的Oracle数据库,它描述了一个算法目录。 有两个表algorithims和xref_alg。
Algorithims可以有父子算法。 Alg_Xref包含两个外键的关系 - xref_alg和xref_parent。
这些是我迄今为止从inspectdb命令
获得的Django模型class Algorithms(models.Model):
alg_id = models.AutoField(primary_key=True)
alg_name = models.CharField(max_length=100, blank=True)
alg_description = models.CharField(max_length=1000, blank=True)
alg_tags = models.CharField(max_length=100, blank=True)
alg_status = models.CharField(max_length=1, blank=True)
...
class Meta:
db_table = u'algorithms'
class AlgXref(models.Model):
xref_alg = models.ForeignKey(Algorithms, related_name='algxref_alg' ,null=True, blank=True)
xref_parent = models.ForeignKey(Algorithms, related_name='algxref_parent', null=True, blank=True)
class Meta:
db_table = u'alg_xref'
在尝试查询AlgXref时遇到这个问题:
DatabaseError: ORA-00904: "ALG_XREF"."ID": invalid identifier
所以错误似乎是它寻找一个不在表中的主键ID。我可以创建一个但看起来有点无意义。反正有没有绕过这个?或者改变我的模特?
编辑:所以经过一些搜索后,似乎Django需要一个模型来拥有一个主键。生命太短暂,所以刚刚添加了一把主键。这会对性能产生什么影响吗?答案 0 :(得分:2)
目前这是Django提供的ORM的限制。每个模型必须有一个标记为primary_key=True
的字段,如果没有,则框架会自动创建名为AutoField
的{{1}}。
然而,正如我们今年的Google Summer of Code中所说的那样,这一点正在进行中,并希望在今年年底之前将在Django中发布。现在你可以尝试使用https://github.com/koniiiik/django提供的Django分支,它包含一个实现(虽然尚未完成,但应该足以满足你的目的)。
至于是否有任何好处,取决于。如果您只是为每个表添加一个自动递增id
列,它肯定会使数据库更具可重用性并减少令人头疼的问题。性能影响不应该太高,您可能会注意到的唯一事情是,如果您有这样的多对多表,只包含两个id
列,则添加第三个列将增加其大小一半。但是,只要您不在该表中存储数十亿行,那就应该无关紧要了。