Django many to many recursive relationship

Обновить

December 2018

Просмотры

754 раз

2

Я не настолько велика, с базами данных, так что извините, если я не описать это очень хорошо ...

У меня есть существующая база данных Oracle, которая описывает в каталог algorithim. Есть две таблицы algorithims и xref_alg.

Algorithims может иметь родитель и ребенок алгоритмы. Alg_Xref содержит эти отношения с двумя внешними ключами - xref_alg и xref_parent.

Эти модели Django я так далеко от команды inspectdb

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, который не находится в таблице .. я мог бы создать один, но, кажется, немного бессмысленно. Есть в любом случае обойти это? Или изменить свои модели?

EDIT: Так после немного поиска, кажется, что Django требует модели, чтобы иметь первичный ключ. Жизнь слишком коротка, поэтому только что добавили первичный ключ. Будет ли это иметь какое-либо влияние на производительность?

1 ответы

2

В настоящее время это ограничение ОРМ , предоставленной Django. Каждая модель должна иметь одно поле помечено как primary_key=True, если не один, каркас автоматически создает AutoFieldс именем id.

Однако, это в настоящее время работают , как мы говорим в рамках этого года Google Summer Кодекса и , надеюсь , будет в Джанго к концу этого года. Сейчас вы можете попробовать использовать вилку Джанго доступной в https://github.com/koniiiik/django , который содержит реализацию (который еще не завершено , но должно быть достаточно для ваших целей).

Что касается того , есть ли польза или нет, это зависит от многого. Это , безусловно , делает базу данных более многоразовыми и вызывает меньше головную боль , если вы просто добавить авто Инкрементирования idстолбца каждую таблицу. Влияние на производительность не должна быть слишком высокой, то единственное , что вы могли бы заметить, что если у вас есть много-ко-многим таблицу , как это, содержащая только две ForeignKeyколонки, добавив третий увеличит его размер на половину. Это должно быть, однако, не имеет значения до тех пор , пока вы не хранить миллиарды строк в этой таблице.