Saya mencari lebih dari sekadar daftar jenis sederhana yang ditemukan di halaman ini :
: primary_key,: string,: text,: integer,: float,: desimal,: datetime,: timestamp,: time,: date,: binary,: boolean
Tetapi apakah ada dokumentasi yang benar-benar mendefinisikan bidang-bidang ini?
Secara khusus:
- Apa perbedaan antara
:string
dan:text
? - Antara
:float
dan:decimal
? - Apa saja fitur yang membedakan
:time
,:timestamp
dan:datetime
?
Apakah nuansa jenis ini didokumentasikan di mana saja?
EDIT: Poin implementasi platform DB tidak relevan dengan pertanyaan yang saya coba tanyakan. Jika, katakanlah, :datetime
tidak memiliki arti yang dimaksudkan dalam dokumentasi Rails, lalu apa yang penulis-penulis db lewati ketika memilih jenis kolom yang sesuai?
ruby-on-rails
Berikan Birchmeier
sumber
sumber
:string
dan:text
dan saya tidak dapat menemukan selain ini. Jadi, saya hanya ingin referensi di masa depan.Jawaban:
Pedoman yang dibangun dari pengalaman pribadi:
serial primary key
dalam postgreSQL). Penggunaannya agak rumit dan tidak dianjurkan.validates_uniqueness_of
danadd_index
dengan:unique => true
opsi) sebagai gantinya untuk mensimulasikan fungsionalitas kunci utama pada salah satu bidang Anda sendiri.Ini adalah tipe-tipe yang sering membingungkan; Saya harap ini membantu. Saya benar-benar tidak tahu mengapa tidak ada dokumentasi resmi tentang ini. Juga, saya bayangkan adaptor basis data yang Anda rujuk ini ditulis oleh orang yang sama yang menulis Rails, jadi mereka mungkin tidak memerlukan dokumentasi apa pun untuk digunakan ketika mereka menulis adaptor. Semoga ini membantu!
Catatan: keberadaan keduanya
:DateTime
dan:Timestamp
, dari apa yang dapat saya temukan, disertakan oleh Rails sebagian besar untuk kompatibilitas dengan sistem basis data. Misalnya,TIMESTAMP
tipe data MySQL disimpan sebagai cap waktu unix. Rentang validnya berlangsung dari 1970 hingga 2038, dan waktu disimpan sebagai jumlah detik yang telah berlalu sejak zaman terakhir , yang seharusnya standar, tetapi dalam praktiknya dapat berbeda dari satu sistem ke sistem lainnya. Menyadari bahwa waktu relatif bukan hal yang baik untuk dimiliki dalam basis data, MySQL kemudian memperkenalkanDATETIME
datatype, yang menyimpan setiap digit pada tahun, bulan, hari, jam, menit dan detik, dengan biaya peningkatan ukuran. ItuTIMESTAMP
datatype dipertahankan untuk kompatibilitas ke belakang. Sistem basis data lainnya mengalami evolusi serupa. Rails mengakui bahwa ada beberapa standar, dan menyediakan antarmuka untuk keduanya. Namun, Rails ActiveRecord default baik:Timestamp
dan:DateTime
untuk tanggal UTC disimpan dalam MySql iniDATETIME
, sehingga tidak ada bedanya fungsional untuk Rails programmer. Ini ada sehingga pengguna yang ingin membedakan antara keduanya dapat melakukannya. (Untuk penjelasan yang lebih mendalam, lihat jawaban SO ini ).sumber
Dari kode sumber cabang master Rails saya menemukan:
abstrak mysql_adapter
yang
super
ditype_to_sql
metodesumber