Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment utiliser Django avec des tables de base de données héritées en lecture seule avec des clés primaires composites ?

Vous parlez alors d'une base de données héritée READONLY, vous pouvez peut-être créer un schéma externe (vues) sans PK multi-colonnes. Par exemple, vous pouvez concaténer des clés de champ. Ici et exemple :

Par exemple :

Tableaux :

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

Schéma externe à lire par 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

modèles 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'    

Vous pouvez affiner la technique pour créer des clés varchar afin de pouvoir travailler avec des index . Je n'écris plus d'échantillons car je ne sais pas quelle est la marque de votre base de données.

Plus d'informations :

Faire Django modèles prennent en charge les clés primaires à plusieurs colonnes ?

ticket 373

Méthodes alternatives