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

Bagaimana cara menyusun skema basis data untuk memungkinkan kasus 1 dalam sejuta?

Anda tampaknya tertarik pada:

-- a and b are related by the association of interest
Foo(a, b)

-- foo(a, b) but not foo(a2, b) for some a2 <> a
Boring(a, b)
unique(b)
FK (a, b) references Foo

-- foo(a, b) and foo(a2, b) for some a2 <> a
Rare(a, b)
FK (a, b) references foo

Jika Anda ingin permintaan untuk tidak terbebani, cukup tentukan Foo. Anda dapat menanyakannya untuk Rare.

Rare = select * from Foo f join Foo f2
    where f.a <> f2.a and f.b = f2.b

Setiap desain lain menderita kompleksitas pembaruan dalam menjaga database tetap konsisten.

Anda memiliki beberapa kekhawatiran kabur tentang Rare yang jauh lebih kecil dari Foo. Tapi apa persyaratan Anda? hanya ada n dalam sejuta catatan Foo yang banyak:banyak di mana Anda akan memilih beberapa desain lain?

Tingkat kerumitan selanjutnya adalah memiliki Foo dan Rare. Pembaruan harus menjaga persamaan di atas tetap benar.

Tampaknya sangat tidak mungkin bahwa ada manfaat dalam mengurangi redundansi 2-atau-3-dalam-sejuta Foo + Rare dengan hanya memiliki Boring + Rare dan merekonstruksi Foo dari mereka. Tetapi mungkin bermanfaat untuk mendefinisikan indeks unik (b) untuk Boring yang akan mempertahankan bahwa a b di dalamnya hanya memiliki satu a. Saat Anda membutuhkan Foo:

Foo = select * from Boring union select * from Rare

Tetapi pembaruan Anda harus mempertahankannya

not exists (select * from Boring b join Rare r where b.b = r.b)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tipe data mysql terbaik untuk gram, miligram, mikrogram, dan kilojoule

  2. Kembalikan MySQL pada mesin MyISAM

  3. ubah mysql ke pdo dan simpan hasilnya dalam variabel

  4. Memanggil prosedur tersimpan MySQL di ROR 4

  5. Menyimpan Perubahan di SlickGrid dengan php