Saya menyiapkan database MySQL yang sangat kecil yang menyimpan, nama depan, nama belakang, email, dan nomor telepon dan saya berjuang untuk menemukan tipe data yang 'sempurna' untuk setiap bidang. Saya tahu tidak ada yang namanya jawaban yang sempurna, tetapi harus ada semacam kesepakatan umum untuk bidang yang umum digunakan seperti ini. Misalnya, saya telah menentukan bahwa nomor telepon AS yang tidak diformat terlalu besar untuk disimpan sebagai int unsigned, setidaknya harus bigint.
Karena saya yakin orang lain mungkin akan menganggap ini berguna, saya tidak ingin membatasi pertanyaan saya hanya pada bidang yang saya sebutkan di atas.
Jenis data apa yang sesuai untuk bidang database umum? Bidang seperti nomor telepon, email, dan alamat?
Berikut adalah beberapa tipe data umum yang saya gunakan (saya tidak terlalu ahli):
sumber
Menurut pengalaman saya, field nama depan / nama belakang minimal harus 48 karakter - ada nama dari beberapa negara seperti Malaysia atau India yang sangat panjang dalam bentuk lengkapnya.
Nomor telepon dan kode pos harus selalu Anda perlakukan sebagai teks, bukan angka. Alasan normal yang diberikan adalah bahwa ada kode pos yang dimulai dengan 0, dan di beberapa negara, nomor telepon juga dapat dimulai dengan 0. Tetapi alasan sebenarnya adalah bahwa itu bukan angka - itu adalah pengenal yang kebetulan dibuat-buat digit numerik (dan itu mengabaikan negara seperti Kanada yang memiliki huruf di kode posnya). Jadi simpan di kolom teks.
Di MySQL Anda dapat menggunakan kolom VARCHAR untuk jenis informasi ini. Walaupun terdengar malas, itu artinya Anda tidak perlu terlalu khawatir tentang ukuran minimum yang tepat.
sumber
VARCHAR(255)
masuk akal.Karena Anda akan berurusan dengan data dengan panjang variabel (nama, alamat email), maka Anda akan ingin menggunakan VARCHAR. Jumlah ruang yang digunakan oleh bidang VARCHAR adalah
[field length]
+ 1 byte, hingga panjang maksimal 255, jadi saya tidak akan terlalu khawatir untuk mencoba menemukan ukuran yang sempurna. Lihatlah apa yang menurut Anda mungkin merupakan panjang terpanjang, lalu gandakan dan setel sebagai batas VARCHAR Anda. Yang mengatakan ...:Saya biasanya mengatur bidang email menjadi VARCHAR (100) - saya belum menemukan masalah dari itu. Nama yang saya setel ke VARCHAR (50).
Seperti yang dikatakan orang lain, nomor telepon dan kode zip / pos sebenarnya bukan nilai numerik, mereka adalah string yang berisi angka 0-9 (dan terkadang lebih!), Dan oleh karena itu Anda harus memperlakukannya sebagai string. VARCHAR (20) seharusnya cukup baik.
Perhatikan bahwa jika Anda menyimpan nomor telepon sebagai bilangan bulat, banyak sistem akan menganggap bahwa angka yang dimulai dengan 0 adalah angka oktal (basis 8)! Oleh karena itu, nomor telepon yang benar-benar valid "0731602412" akan dimasukkan ke dalam database Anda sebagai nomor desimal "124192010" !!
sumber
Saya melakukan hal yang sama, dan inilah yang saya lakukan.
Saya menggunakan tabel terpisah untuk nama, alamat, email, dan angka, masing-masing dengan kolom NameID yang merupakan kunci asing pada segala hal kecuali tabel Nama, di mana itu adalah kunci cluster utama. Saya menggunakan MainName dan FirstName alih-alih LastName dan FirstName untuk memungkinkan entri bisnis serta entri pribadi, tetapi Anda mungkin tidak membutuhkannya.
Kolom NameID menjadi smallint di semua tabel karena saya cukup yakin saya tidak akan membuat lebih dari 32000 entri. Hampir semuanya adalah varchar (n) mulai dari 20 hingga 200, tergantung pada apa yang ingin Anda simpan (Ulang tahun, komentar, email, nama yang sangat panjang). Itu benar-benar tergantung pada jenis barang yang Anda simpan.
Tabel Angka adalah tempat saya menyimpang dari itu. Saya mengaturnya agar memiliki lima kolom berlabel NameID, Phone #, CountryCode, Extension, dan PhoneType. Saya sudah membahas NameID. Ponsel # adalah varchar (12) dengan batasan centang yang terlihat seperti ini: CHECK (Phone # like '[0-9] [0-9] [0-9] - [0-9] [0-9] [0 -9] - [0-9] [0-9] [0-9] [0-9] '). Ini memastikan bahwa hanya yang saya inginkan yang masuk ke dalam database dan datanya tetap sangat konsisten. Kode ekstensi dan negara yang saya sebut smallints nullable, tetapi itu bisa menjadi varchar jika Anda mau. PhoneType adalah varchar (20) dan bukan nullable.
Semoga ini membantu!
sumber