Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara menggunakan Django dengan tabel database readonly lama dengan kunci primer komposit?

Anda berbicara tentang database READONLY lama, mungkin Anda dapat membuat skema eksternal (tampilan) tanpa PK multi-kolom. Misalnya Anda dapat menggabungkan kunci bidang. Berikut dan contohnya:

Misalnya:

Tabel:

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

Skema eksternal untuk dibaca oleh 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

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

Anda dapat memperbaiki teknik untuk membuat kunci varchar agar dapat bekerja dengan indeks . Saya tidak menulis sampel lagi karena saya tidak tahu apa merek basis data Anda.

Informasi lebih lanjut:

Lakukan Django model mendukung kunci utama multi-kolom?

tiket 373

Metode alternatif




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. java.sql.SQLException Indeks parameter di luar rentang (1> jumlah parameter, yaitu 0)

  2. Nilai peningkatan dalam kueri pembaruan MySQL

  3. Kesalahan Laravel classloader.php gagal membuka aliran:Tidak ada file atau direktori seperti itu

  4. Ganti nama kolom di MySQL

  5. Dapatkan posting WP berdasarkan beberapa pasangan kunci/nilai meta menggunakan IN