Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como usar o Django com tabelas de banco de dados readonly legadas com chaves primárias compostas?


Você está falando de um banco de dados READONLY legado, então, talvez você possa criar um esquema externo (views) sem PKs de várias colunas. Por exemplo, você pode concatenar chaves de campo. Aqui e exemplo:

Por exemplo:

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

Esquema externo para ser lido pelo 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

Modelos 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'    

Você pode refinar a técnica para fazer chaves varchar para poder trabalhar com índices . Não escrevo mais amostras porque não sei qual é a marca do seu banco de dados.

Mais Informações:

Faça Django modelos suportam chaves primárias de várias colunas?

ticket 373

Métodos alternativos