PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Hubungan Django Postgres ArrayField vs Satu-ke-Banyak

Jika Anda menggunakan bidang array

  • Ukuran setiap baris dalam DB Anda akan menjadi agak besar sehingga Postgres akan menggunakan lebih banyak tabel roti panggang (http://www.postgresql.org/docs/9.5/static/storage-toast.html )
  • Setiap kali Anda mendapatkan baris, kecuali jika Anda secara khusus menggunakan defer (https://docs.djangoproject.com/en/1.9 /ref/models/querysets/#defer ) bidang atau mengecualikannya dari kueri melalui only , atau values atau sesuatu, Anda membayar biaya memuat semua nilai itu setiap kali Anda mengulangi baris itu. Jika itu yang Anda butuhkan maka jadilah itu.
  • Pemfilteran berdasarkan nilai dalam larik itu, sementara mungkin tidak akan sebaik dan Django ORM tidak membuatnya sejelas seperti pada tabel M2M.

Jika Anda menggunakan M2M

  • Anda dapat memfilter dengan lebih mudah pada nilai terkait tersebut
  • Bidang tersebut ditunda secara default, Anda dapat menggunakan prefetch_related jika Anda membutuhkannya dan kemudian menjadi mewah jika Anda hanya ingin sebagian dari nilai tersebut dimuat
  • Total penyimpanan dalam DB akan sedikit lebih tinggi dengan M2M karena kunci, dan bidang id tambahan
  • Biaya penggabungan dalam kasus ini sepenuhnya dapat diabaikan karena adanya kunci.

Secara pribadi saya akan mengatakan pergi dengan tabel M2M, tetapi saya tidak tahu aplikasi spesifik Anda. Jika Anda akan bekerja dengan sejumlah besar data, sebaiknya ambil set data yang representatif dan uji kedua metode dengannya.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Strategi pengindeksan untuk kombinasi yang berbeda dari klausa WHERE termasuk. pola teks

  2. KONSTRAINT UNIK Postgres untuk array

  3. SQL:Cara menggabungkan duplikat case-insensitive

  4. Bagaimana age() Bekerja di PostgreSQL

  5. Jalankan kueri PostgreSQL dari baris perintah