Mysql
 sql >> Database >  >> RDS >> Mysql

Come utilizzare Django con tabelle di database di sola lettura legacy con chiavi primarie composite?

Quindi stai parlando di un database READONLY legacy, forse puoi creare uno schema esterno (viste) senza PK multi-colonna. Ad esempio, puoi concatenare le chiavi di campo. Ecco un esempio:

Ad esempio:

Tabelle:

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)
)

Schema esterno che deve essere letto da django:

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

modelli django:

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'    

Puoi perfezionare la tecnica per creare chiavi varchar per poter lavorare con gli indici . Non scrivo più campioni perché non so quale sia il marchio del tuo database.

Maggiori informazioni:

Do Django i modelli supportano chiavi primarie a più colonne?

ticket 373

Metodi alternativi