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

Terlalu banyak tabel; MySQL hanya dapat menggunakan 61 tabel dalam satu gabungan

Anda menggunakan desain EAV, dan mencoba membangun kembali satu baris dari sejumlah atribut yang bervariasi. Ini menunjukkan salah satu dari banyak ranjau darat yang akan Anda temui menggunakan desain EAV:ada batasan praktis pada jumlah gabungan yang dapat Anda lakukan dalam satu kueri SQL.

Khususnya di MySQL -- ada batasan yang sulit, seperti yang Anda temukan. Tetapi bahkan di merek RDBMS lain, ada batas efektif karena biaya penggabungan adalah geometris sehubungan dengan jumlah tabel.

Jika Anda menggunakan EAV, jangan mencoba membuat ulang baris dalam SQL seolah-olah Anda memiliki desain database konvensional. Sebagai gantinya, ambil atribut sebagai baris, diurutkan berdasarkan id entitas. Kemudian pasca-proses dalam kode aplikasi Anda. Ini berarti bahwa Anda tidak dapat membuang data dalam satu langkah -- Anda harus menulis kode untuk mengulang baris atribut, dan mereformasi setiap baris data sebelum Anda dapat mengeluarkannya.

EAV bukanlah desain database yang nyaman. Ada banyak kelemahan mahal untuk menggunakannya, dan Anda baru saja mencapai salah satunya.

Lihat http://www.simple-talk.com/opinion /opinion-pieces/bad-carma/ untuk kisah hebat tentang bagaimana menggunakan EAV untuk satu bisnis.

Dan juga lihat http://en.wikipedia.org/wiki/Inner-platform_effect karena EAV adalah contoh dari Anti-pola ini.

Saya memahami kebutuhan untuk mendukung serangkaian atribut dinamis per produk dalam katalog. Tapi EAV akan mematikan aplikasi Anda. Inilah yang saya lakukan untuk mendukung atribut dinamis:

  • Tentukan kolom nyata di tabel dasar untuk setiap atribut yang umum untuk semua jenis produk. Nama produk, harga, jumlah stok, dll. Bekerja keras untuk membayangkan produk kanonik entitas sehingga Anda dapat menyertakan atribut sebanyak mungkin dalam set ini.

  • Tentukan satu kolom lagi dengan tipe TEXT untuk semua atribut tambahan dari setiap jenis produk yang diberikan. Simpan di kolom ini sebagai LOB Berseri atribut, dalam format apa pun yang cocok untuk Anda:XML, JSON, YAML, DSL buatan Anda sendiri, dll.

    Perlakukan ini sebagai satu kolom dalam kueri SQL Anda. Pencarian, pengurutan, atau tampilan apa pun yang perlu Anda lakukan berdasarkan atribut ini mengharuskan Anda untuk mengambil seluruh TEXT blob ke aplikasi Anda, deserialize, dan analisis atribut menggunakan kode aplikasi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. #1273 - Susunan tidak diketahui:'utf8mb4_unicode_ci' cPanel

  2. Mengambil indeks dari baris yang disisipkan

  3. Panggilan Ajax mengembalikan seluruh halaman, bukan hanya nilai gema

  4. Kesalahan:pilih perintah ditolak untuk pengguna '<userid>'@'<ip-address>' untuk tabel '<table-name>'

  5. C# Pengumpulan Koneksi MySQL