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

Kekurangan tabel dengan terlalu banyak kolom

Ada beberapa hal yang perlu dipertimbangkan di sini:

  • Apakah daftar atribut berubah secara signifikan dari waktu ke waktu
  • Apakah daftar atribut memerlukan atribut buatan pengguna khusus
  • Apakah ada atribut yang berbeda untuk sekolah yang berbeda (yaitu banyak atribut hanya berlaku untuk satu atau beberapa sekolah)?

Jika salah satu dari ini benar, Anda mungkin berpikir tentang pendekatan toko properti seperti EAV, hstore, json bidang, bidang xml, dll .

Jika tidak - jika Anda memiliki daftar properti yang cukup statis di mana sebagian besar masuk akal untuk sebagian besar baris - maka sebenarnya tidak ada masalah dengan menjadikannya sebagai 60 kolom individual. Akan lebih mudah untuk menambahkan indeks untuk kumpulan atribut yang sering ditelusuri, termasuk indeks parsial dan komposit, dll, dan pencarian - terutama untuk banyak atribut yang berbeda - akan banyak lebih cepat.

Lihat juga:Desain database - haruskah saya menggunakan 30 kolom atau 1 kolom dengan semua data dalam bentuk JSON/XML ?

Ada juga opsi kompromi yang tersedia untuk Anda:Tabel utama untuk detail terpenting yang sering Anda cari, ditambah tabel samping untuk pengelompokan atribut yang logis. Ucapkan:

yearly_summary (
    yearly_summary_id serial primary key,
    school_id integer,
    total_students integer,
    ...
) 

ditambah

yearly_student_stats(
    yearly_summary_id integer primary key references yearly_summary(yearly_summy_id) on delete cascade,
    ...
)

dll. integer primary key itu juga foreign key berarti Anda memiliki hubungan 1:1 (opsional) yang dipaksakan ke tabel lainnya. Pendekatan ini dapat berguna jika Anda memiliki beberapa pengelompokan logis atribut yang dapat dikelompokkan ke dalam tabel samping.

Saya juga akan terkejut jika sedikit lebih banyak pemikiran tidak mengungkapkan hal-hal yang lakukan masuk akal untuk dinormalisasi. Apakah Anda memiliki year7_blah , year8_blah , year9_blah dll kolom? Jika demikian:Kandidat yang bagus untuk normalisasi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pilih pengguna yang hanya dimiliki oleh departemen tertentu

  2. Tidak dapat mengonfigurasi AspNet.Identity menggunakan PostgreSQL

  3. Gunakan tipe Point dengan PostgreSQL dan JPA/Hibernate

  4. Saya ingin memulihkan database dengan skema yang berbeda

  5. IntegrityError saat menyimpan item baru ke db postgresql di Django?