Bolehkah memiliki tabel hanya dengan satu kolom? Saya tahu ini tidak ilegal secara teknis, tetapi apakah itu dianggap desain yang buruk?
EDIT:
Berikut beberapa contohnya:
- Anda memiliki tabel dengan 50 kode negara bagian AS yang valid, tetapi Anda tidak perlu menyimpan nama negara bagian yang bertele-tele.
- Daftar hitam email.
Seseorang menyebutkan menambahkan bidang kunci. Menurut saya, kolom tunggal ini AKAN menjadi kunci utama.
sql
database-design
Aheho
sumber
sumber
Jawaban:
Ya, memang desain yang bagus untuk mendesain meja sedemikian rupa agar paling efisien. "Desain RDBMS yang Buruk" biasanya berpusat di sekitar inefisiensi.
Namun, saya telah menemukan bahwa sebagian besar kasus desain kolom tunggal dapat memperoleh manfaat dari kolom tambahan. Misalnya, Kode Status biasanya dapat mencantumkan nama Status Lengkap di kolom kedua. Atau daftar hitam dapat memiliki catatan yang terkait. Namun, jika desain Anda benar-benar tidak membutuhkan informasi tersebut, maka tidak masalah untuk memiliki kolom tunggal.
sumber
Dalam istilah
relational algebra
ini akan menjadi hubungan unary, yang berarti " benda ini ada "Ya, tidak masalah memiliki tabel yang mendefinisikan relasi seperti itu: misalnya, untuk mendefinisikan domain.
Nilai dari tabel seperti itu tentu saja harus natural primary key.
Tabel pencarian
prime numbers
adalah yang pertama terlintas di benak saya.sumber
Saya telah menggunakannya di masa lalu. Salah satu klien saya ingin memblokir otomatis siapa pun yang mencoba mendaftar dengan nomor telepon di daftar besar yang dia miliki, jadi itu hanya satu daftar hitam besar.
sumber
Jika ada kebutuhan yang valid untuk itu, maka saya tidak melihat ada masalah. Mungkin Anda hanya ingin daftar kemungkinan untuk ditampilkan karena alasan tertentu dan Anda ingin dapat mengubahnya secara dinamis, tetapi tidak perlu menautkannya ke tabel lain.
sumber
Satu kasus yang terkadang saya temukan adalah seperti ini:
Tabel country_id , hanya berisi satu kolom dengan ID numerik untuk setiap negara.
Tabel country_description , berisi kolom dengan ID negara, kolom dengan ID bahasa, dan kolom dengan nama negara yang dilokalkan.
Tabel company_factories , berisi informasi untuk setiap pabrik dari perusahaan tersebut, termasuk negara di mana lokasinya.
Jadi untuk menjaga koherensi data dan data independen bahasa dalam tabel, database menggunakan skema ini dengan tabel dengan hanya satu kolom untuk memungkinkan kunci asing tanpa ketergantungan bahasa.
Dalam hal ini saya pikir keberadaan tabel satu kolom dapat dibenarkan.
Diedit sebagai tanggapan atas komentar oleh: Quassnoi
(sumber: ggpht.com )
Dalam skema ini saya dapat mendefinisikan kunci asing di tabel company_factories yang tidak mengharuskan saya untuk memasukkan kolom Bahasa di tabel, tetapi jika saya tidak memiliki tabel countries_id, saya harus menyertakan kolom Bahasa di tabel untuk menentukan kunci asing .
sumber
Akan ada kasus yang jarang terjadi ketika tabel satu kolom masuk akal. Saya membuat satu database di mana daftar kode bahasa yang valid adalah tabel kolom tunggal yang digunakan sebagai kunci asing. Tidak ada gunanya memiliki kunci yang berbeda, karena kode itu sendiri adalah kuncinya. Dan tidak ada deskripsi tetap karena deskripsi kode bahasa akan bervariasi menurut bahasa untuk beberapa konteks.
Secara umum, setiap kasus di mana Anda memerlukan daftar nilai otoritatif yang tidak memiliki atribut tambahan adalah kandidat yang baik untuk tabel satu kolom.
sumber
Saya menggunakan tabel satu kolom sepanjang waktu - tergantung, tentu saja, apakah desain aplikasi sudah menggunakan database. Setelah saya menanggung beban desain untuk membuat koneksi database, saya memasukkan semua data yang bisa berubah ke dalam tabel jika memungkinkan.
Saya dapat memikirkan dua kegunaan tabel kolom tunggal OTMH:
1) Item data ada. Sering digunakan dalam daftar dropdown. Juga digunakan untuk tes legitimasi sederhana.
Misalnya. singkatan negara bagian AS dua huruf; Kode pos yang kami kirim; kata-kata legal di Scrabble; dll.
2) Atribut biner renggang, yaitu, dalam tabel besar, atribut biner yang benar hanya untuk beberapa record. Alih-alih menambahkan kolom boolean baru, saya mungkin membuat tabel terpisah yang berisi kunci record yang atributnya benar.
Misalnya. karyawan yang memiliki penyakit terminal; bank dengan 360 hari setahun (sebagian besar menggunakan 365); dll.
-Al.
sumber
Tidak masalah asalkan mengandung nilai unik.
sumber
Sebagian besar saya telah melihat ini di tabel tipe pencarian seperti tabel status yang Anda jelaskan. Namun, jika Anda melakukan ini, pastikan untuk mengatur kolom sebagai kunci utama untuk memaksa keunikan. Jika Anda tidak dapat menetapkan nilai ini sebagai unik, Anda tidak boleh menggunakan satu kolom.
sumber
Saya akan mengatakan secara umum, ya. Tidak yakin mengapa Anda hanya membutuhkan satu kolom. Ada beberapa pengecualian untuk ini yang saya lihat digunakan secara efektif. Itu tergantung pada apa yang ingin Anda capai.
Mereka tidak benar-benar desain yang bagus ketika Anda memikirkan skema database, tetapi seharusnya hanya digunakan sebagai tabel utilitas.
Saya telah melihat tabel angka digunakan secara efektif di masa lalu.
sumber
Tujuan database adalah menghubungkan potongan informasi satu sama lain. Bagaimana Anda bisa melakukan itu ketika tidak ada data untuk dihubungkan?
Mungkin ini semacam tabel kompilasi (yaitu Nama Depan + Nama Belakang + Tanggal Lahir), meskipun saya masih tidak yakin mengapa Anda ingin melakukan itu.
EDIT: Saya bisa melihat menggunakan tabel semacam ini untuk daftar sederhana dari beberapa jenis. Apakah itu tujuan Anda menggunakannya?
sumber
Ya, selama field adalah kunci utama seperti yang Anda katakan. Alasannya karena jika Anda memasukkan data duplikat, baris tersebut hanya akan dapat dibaca. Jika Anda mencoba untuk menghapus salah satu baris yang digandakan. itu tidak akan berfungsi karena server tidak akan tahu baris mana yang akan dihapus.
sumber
Satu-satunya kasus penggunaan yang dapat saya bayangkan adalah tabel kata-kata yang mungkin untuk permainan kata. Anda mengakses tabel hanya untuk memverifikasi bahwa sebuah string adalah sebuah kata: pilih kata dari kata-kata di mana kata =?. Tetapi ada struktur data yang jauh lebih baik untuk menyimpan daftar kata daripada relasional database yang.
Jika tidak, data dalam database biasanya ditempatkan di database untuk memanfaatkan hubungan antara berbagai atribut data. Jika data Anda tidak memiliki atribut di luar nilainya, bagaimana hubungan ini akan dikembangkan?
Jadi, meski tidak ilegal, secara umum Anda mungkin tidak boleh memiliki tabel dengan hanya satu kolom.
sumber
Semua tabel saya memiliki setidaknya empat bidang teknologi, kunci utama serial, stempel waktu pembuatan dan modifikasi, dan penghapusan lunak boolean. Dalam daftar hitam mana pun, Anda juga pasti ingin tahu siapa yang menambahkan entri. Jadi bagi saya, jawabannya adalah tidak, tabel dengan hanya satu kolom tidak akan masuk akal kecuali saat membuat prototipe sesuatu.
sumber
Ya itu baik-baik saja. tetapi bidang ID tidak bisa melukainya kan?
sumber