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 melaluionly
, atauvalues
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.