Yang saya butuhkan adalah migrasi untuk menerapkan batasan unik ke kombinasi kolom. yaitu untuk people
tabel, kombinasi first_name
, last_Name
dan Dob
harus unik.
ruby-on-rails
database
rangalo
sumber
sumber
Menurut howmanyofme.com, "Ada 46.427 orang bernama John Smith" di Amerika Serikat saja. Itu sekitar 127 tahun. Karena ini jauh melebihi usia rata-rata manusia, ini berarti bahwa bentrokan DOB secara matematis pasti.
Semua yang saya katakan adalah bahwa kombinasi bidang unik tertentu dapat menyebabkan frustrasi pengguna / pelanggan yang ekstrem di masa depan.
Pertimbangkan sesuatu yang benar-benar unik, seperti nomor identifikasi nasional, jika sesuai.
(Saya sadar bahwa saya sangat terlambat ke pesta dengan pesta ini, tetapi ini bisa membantu pembaca di masa depan.)
sumber
Anda mungkin ingin menambahkan batasan tanpa indeks. Ini akan tergantung pada database apa yang Anda gunakan. Di bawah ini adalah contoh kode migrasi untuk Postgres.
(tracking_number, carrier)
adalah daftar kolom yang ingin Anda gunakan untuk kendala.Ada beberapa kendala yang dapat Anda tambahkan. Baca dokumen
sumber
add_index
metode. ;)pg_constraint
tabel.Hai Anda dapat menambahkan indeks unik dalam migrasi Anda ke kolom misalnya
atau pisahkan indeks unik untuk setiap kolom
sumber
Dalam contoh khas tabel gabungan antara pengguna dan pos:
Mencoba membuat dua catatan serupa akan membuat kesalahan basis data (Postgres dalam kasus saya):
misalnya melakukan itu:
Contoh sepenuhnya dapat dijalankan: https://gist.github.com/Dorian/9d641ca78dad8eb64736173614d97ced
db/schema.rb
dihasilkan: https://gist.github.com/Dorian/a8449287fa62b88463f48da986c1744asumber
Demi kelengkapan, dan untuk menghindari kebingungan di sini adalah 3 cara melakukan hal yang sama:
Menambahkan kendala unik bernama ke kombinasi kolom di Rails 5.2+
Katakanlah kita memiliki tabel Lokasi yang dimiliki pengiklan dan memiliki kode referensi_kolom dan Anda hanya ingin 1 kode referensi per pengiklan. jadi Anda ingin menambahkan batasan unik ke kombinasi kolom dan beri nama.
Melakukan:
rails g migration AddUniquenessConstraintToLocations
Dan buat migrasi Anda terlihat seperti ini:
ATAU versi blok ini.
ATAU versi SQL mentah ini
Semua ini akan memiliki hasil yang sama, periksa
schema.rb
sumber