Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie verwende ich Django mit Legacy-Readonly-Datenbanktabellen mit zusammengesetzten Primärschlüsseln?

Sie sprechen dann von einer Legacy-READONLY-Datenbank, vielleicht können Sie ein externes Schema (Ansichten) ohne mehrspaltige PKs erstellen. Beispielsweise können Sie Feldschlüssel verketten. Hier und Beispiel:

Zum Beispiel:

Tabellen:

create table A (
  a1 int not null,
  a2 int not null,
  t1 varchar(100),
  primary key (a1, a2)
)

create table B (
  b1 int not null,
  b2 int not null,
  a1 int not null,
  a2 int not null,
  t1 varchar(100),
  primary key (b1, b2),
  constraint b_2_a foreign key (a1,a2) 
  references A (a1, a2)
)

Externes Schema, das von Django gelesen werden soll:

Create view vA as 
select 
   a1* 1000000 + a2 as a, A.* 
from A

Create view vB as 
select 
   b1* 1000000 + b2 as b, 
   a1* 1000000 + a2 as a, B.* 
from B

Django-Modelle:

class A(models.Model):
    a = models.IntegerField(  primary_key=True )
    a1 = ...
    class Meta(CommonInfo.Meta):
        db_table = 'vA'    

class B(models.Model):
    b = models.IntegerField(  primary_key=True )
    b1 = ...
    a = models.ForeignKey( A )
    a1 = ...
    class Meta(CommonInfo.Meta):
        db_table = 'vB'    

Sie können die Technik verfeinern, um varchar-Schlüssel so zu erstellen, dass sie mit Indizes arbeiten können . Ich schreibe keine weiteren Beispiele, weil ich nicht weiß, was Ihre Datenbankmarke ist.

Weitere Informationen:

Machen Sie Django Modelle mehrspaltige Primärschlüssel unterstützen?

Ticket 373

Alternative Methoden