Haruskah kita membuat struktur database dengan jumlah minimum tabel?
Haruskah itu dirancang sedemikian rupa sehingga semuanya tetap di satu tempat atau tidak apa-apa untuk memiliki lebih banyak meja?
Apakah hal itu akan memengaruhi apa pun?
Saya mengajukan pertanyaan ini karena seorang teman saya memodifikasi beberapa struktur basis data di mediaWiki. Pada akhirnya, alih-alih 20 meja, dia hanya menggunakan 8 meja, dan butuh 8 bulan untuk melakukan itu (itu adalah tugas kuliahnya).
SUNTING
Saya menyimpulkan jawabannya sebagai: ukuran tabel TIDAK masalah, sampai kasusnya luar biasa; dalam hal ini denasionalisasi dapat membantu.
Terima kasih untuk semua orang atas jawabannya.
database
database-design
Shaheer
sumber
sumber
Jawaban:
Berikan jumlah tabel yang lebih besar. Lebih khawatir tentang mendapatkan desain yang benar. Jika perhatian utama Anda adalah jumlah tabel, Anda mungkin tidak boleh merancang sistem basis data.
Jika teman Anda hanya membutuhkan 8 tabel, dan sistem berfungsi dengan baik, maka 8 adalah angka yang benar, dan 12 sisanya mungkin tidak diperlukan untuk apa pun yang ia lakukan.
Kemungkinan pengecualian mungkin adalah lingkungan khusus yang memiliki batasan keras pada nomor tabel, tapi saya tidak bisa memikirkan contoh konkret sistem seperti itu di luar kepala saya.
sumber
If your major concern is quantity of tables, you should probably not be designing database systems.
Database harus memiliki tabel persis seperti yang dibutuhkan. Tidak lebih sedikit, tidak lebih.
sumber
Tabel database harus mematuhi Prinsip Tanggung Jawab Tunggal, seperti halnya kelas. Setiap tabel harus berurusan dengan tidak lebih dari satu kelompok data terkait untuk memulai. Selain kinerja, ini membuat seluruh binatang lebih mudah untuk dikelola, karena tabelnya sendiri akan lebih kecil. Ini memberi Anda kinerja yang lebih baik juga, karena tabel yang lebih kecil lebih cepat untuk mencari dan bergabung.
Jangan khawatir tentang jumlah tabel lebih dari yang Anda khawatirkan tentang jumlah kelas - jangan khawatir sama sekali. Fokus pada membuat kode yang baik, bersih, dapat dibaca, bukan pada seberapa banyak ruang yang dibutuhkan. Refactor secara agresif begitu Anda memiliki produk yang berfungsi untuk membuatnya lebih baik - dan maksud saya database juga! Anda akan melihat kolom yang seharusnya ada di tabel lain, atau tidak diperlukan, dll. Profil untuk melihat permintaan apa yang paling lama dan mengapa, dan mengatasi masalah tersebut jika itu benar-benar masalah.
sumber
Database produksi untuk aplikasi bisnis mungkin berisi ratusan atau bahkan ribuan tabel. Anda memerlukan jumlah tabel yang Anda butuhkan untuk persyaratan bisnis. Mencoba mengurangi jumlah tabel hanya demi memiliki lebih sedikit tabel biasanya akan menghasilkan database yang lebih sulit untuk ditanyakan, memiliki masalah integritas data dan jauh lebih sulit untuk dikelola daripada database yang dinormalisasi.
Ada saat-saat ketika denasionalisasi dibutuhkan. Ini seharusnya hanya dilakukan oleh seseorang yang tahu persis apa yang dia lakukan dan mengapa. Sangat mudah untuk membersihkan denominasi sehingga hanya boleh dilakukan oleh spesialis basis data atau pengembang aplikasi senior dengan pengalaman bertahun-tahun dalam basis data. Orang yang tidak berpengalaman harus berusaha untuk, setidaknya, mencapai bentuk normal ketiga (kecuali jika Anda melakukan pergudangan data yang merupakan area yang saya tidak akan mempertimbangkan untuk mempekerjakan orang yang tidak berpengalaman) dalam database apa pun yang ia desain.
Ketika orang mengatakan mengurangi tabel karena gabungan itu mahal, mereka umumnya bodoh atau memiliki database yang dirancang dengan buruk yang tidak memiliki indeks kritis atau menggunakan kunci alami mulit-kolom besar. Database relasional dirancang untuk menggunakan bergabung dan bergabung bisa sangat efisien jika FK diindeks dengan benar dan mereka menggunakan bidang kecil untuk bergabung (bilangan bulat paling efisien). Anda akan perhatikan bahwa bisnis besar yang memiliki basis data berukuran terrabyte entah bagaimana berhasil mendapatkan kinerja yang sangat baik dan menggunakan gabungan.
Tidak ada perancang basis data yang serius yang pernah mencoba mengurangi jumlah tabel hanya karena mereka menginginkan lebih sedikit tabel. Anda mengurangi jumlah tabel karena data tidak lagi diperlukan atau Anda memiliki masalah kinerja yang tidak dapat Anda selesaikan dengan cara lain (dan ada banyak cara untuk mencoba sebelum mengambil risiko yang luas untuk data Anda mendenormalkan sebuah tabel) .
sumber
Karena setiap bidang dalam database ditentukan oleh kombinasi nama tabel, nama kolom, kunci utama dan nilai, Anda selalu dapat mengurangi jumlah tabel dengan melakukan denormalisasi menjadi satu tabel yang menyimpan hal itu. Tidak terlalu bermanfaat, tetapi sepenuhnya mungkin.
Tabel adalah lapisan abstrak yang membantu dengan masalah berurusan dengan data. Itu sebabnya mereka diciptakan. Saya membuat lelucon tetapi memahami bahwa Anda dapat mengurangi setiap set data ke satu tabel master segera menunjukkan mengapa Anda tidak boleh: karena tabel membawa Anda sesuatu. Pada level konseptual, mereka memberi Anda struktur yang lebih mudah dipahami manusia daripada data serial. Pada tingkat peralihan mereka membawa konsep normalisasi: untuk menghindari penyimpanan data yang berlebihan dan memberikan satu titik untuk perubahan, daripada mengubah sesuatu di beberapa tempat. Pada tingkat teknis, basis data membawa sebagian besar hal yang ingin Anda lakukan dengan data, banyak alat, dan mengimplementasikannya dan mengujinya lebih dari yang mungkin Anda akan lakukan sendiri. Pikirkan tipe data, nilai default, hak pengguna, indeks, batasan kunci asing dll. Ini telah diuji, digunakan oleh banyak orang, dioptimalkan, debugged. (Tidak ke dalam kesempurnaan, tapi tetap saja.)
Karena database adalah alat, yang utama adalah memutuskan bagaimana menggunakan alat tersebut. Jumlah tabel tidak penting. Meminimalkan selalu dimungkinkan tetapi dengan biaya membuang manfaat. (Jika Anda membaca lebih banyak tentang normalisasi, Anda akan menjumpai beberapa kasus untuk melakukan denormalisasi - tetapi meskipun demikian itu semua adalah tentang keputusan yang tepat dan bukan hanya secara buta mengurangi jumlah tabel.)
sumber
Anda harus menggunakan hak jumlah meja. Anda bisa secara teori puas dengan tabel tabel tunggal dengan mendenormalisasi seluruh database, tetapi database tidak dapat digunakan. Temanmu kedengarannya dia terlalu banyak waktu.
sumber
Memiliki jumlah minimum tabel menurut saya sebagai tujuan yang sangat aneh.
Tentu saja mengurangi skema dari 20 tabel menjadi 8 mungkin merupakan hal yang baik (jika dilakukan dengan baik itu dapat mengurangi bergabung dan meningkatkan kinerja, menghapus kolom yang tidak digunakan dan sebagainya) tetapi itu juga bisa membuat lebih sulit untuk memahami dan meningkatkan ke depan.
Untuk memikirkannya dengan cara lain menurut Anda normalisasi adalah hal yang baik? Normalisasi biasanya mengarah ke sejumlah besar tabel tetapi juga mengarah pada solusi yang lebih dapat dipertahankan, mengurangi duplikasi data dan manajemen data yang lebih mudah.
Tentu saja itu juga dapat menyebabkan kinerja lebih lambat (dengan asumsi database dinormalisasi dirancang dengan baik).
Pada akhirnya Anda perlu berpikir tentang apa persyaratan Anda di area ini, tetapi sebagai posisi awal default, saya akan mengatakan untuk tingkat normalisasi yang masuk akal dan kemudian melihat apakah itu menyebabkan masalah spesifik di mana lebih sedikit tabel mungkin menjadi solusi.
sumber
Angka tidak penting. Desain adalah. Lihatlah beberapa sistem di luar sana. Magento, PHPBB, dll. Mereka memiliki lusinan tabel dalam sistem mereka dan berfungsi dengan baik.
sumber
Seiring dengan kekhawatiran untuk normalisasi dan kinerja, Anda dapat menggunakan "yang akan membutuhkan tabel lain" sebagai cara untuk mengelola ruang lingkup aplikasi. Fitur itu akan membutuhkan tabel baru dan semua waktu, energi dan upaya untuk merancang, membangun, menguji, mengelola dalam peningkatan, dan semua pengkodean lain yang terlibat. Menambahkan 5 bidang ke tabel yang ada (jika perlu) jauh lebih mudah daripada tabel 5 kolom.
sumber
Jika Anda mendesain database dengan mencoba meminimalkan pembuatan tabel, maka Anda akan segera melihat kesulitan mendadak dan kesalahan dalam cara Anda.
Jumlah tabel tidak boleh berada di garis depan pikiran Anda saat membuat desain basis data. Tempatkan barang-barang di mana mereka harus pergi secara logis dan relasional.
sumber
Saya pikir jumlah tabel penting dan dapat memiliki dampak besar pada kinerja jika Anda memilih untuk membagi data yang seharusnya, untuk semua maksud dan tujuan bisnis, tetap bersama, menjadi beberapa tabel (yaitu sehingga Anda akan memiliki database yang dinormalisasi). Biasanya ketika Anda melakukan ini, Anda akan dipaksa untuk BERGABUNG Operasi (atau setara non-SQL) untuk mendapatkan semua data yang Anda butuhkan dan untuk tabel cukup besar yang terstruktur seperti ini, kinerja rawa turun cepat.
Saya tidak akan masuk ke rincian, tapi saya pikir fakta yang sangat nyata bahwa jumlah tabel dapat mempengaruhi kinerja adalah salah satu alasan mengapa tidak ada database SQL seperti Cassandra, Mongo, dan Google BigTable (sic!) Telah ditemukan, dan itu juga mengapa mereka mendorong de-normalisasi data (dan akibatnya menghindari sejumlah besar tabel / koleksi, dll).
Hal yang sama dapat dikatakan untuk server pencarian seperti Solr Apache yang tidak benar-benar mendorong atau dengan mudah memfasilitasi pemisahan dokumen Anda menjadi beberapa "tabel" atau "jenis entri" yang mendorong Anda alih-alih memiliki skema "satu mencakup semua" yang memiliki bidang yang sama untuk semua jenis dokumen yang ingin Anda indeks (dan akibatnya menghindari harus melakukan operasi seperti BERGABUNG).
Saya tidak mengatakan bahwa fakta sederhana memiliki x tabel dalam skema tentu akan membuatnya lebih lambat daripada skema dengan x / 2 tabel sepanjang waktu, tetapi ada konteks tertentu di mana ia dapat menyebabkan perlambatan karena konsekuensinya operasi tambahan diperlukan untuk mengumpulkan data di semua tabel tersebut. Melanjutkan ini, saya juga tidak berpikir bahwa boleh saja mengatakan "sejumlah tabel dan normalisasi data yang ekstrem tidak berdampak apa pun terhadap kinerja".
sumber
Paman Bob berpendapat bahwa More is Simpler.
Lihat http://c2.com/cgi/wiki?FearOfAddingTables
"desain yang bagus umumnya disederhanakan dengan menambahkan tabel"
Saya percaya bahwa hampir semua entitas banyak-ke-banyak, yang membutuhkan lebih banyak tabel.
Buat tabel negara dengan kode benua di dalamnya. Oh, Anda tidak bisa karena sebenarnya ada 8 negara lintas benua. Sama dengan mata uang. Panama menggunakan dua.
sumber
Maka jawabannya adalah YA.
Tapi tergantung apa arti sebenarnya dari jumlah tabel "minimum".
Misalnya (anti-contoh).
Jika saya memiliki objek berikutnya
dan keduanya memiliki status (bidang) yang sama dan tidak ada batasan keamanan, cara ini lebih cocok untuk melakukan satu tabel
agak dua tabel yang berbeda
kontra adalah daripada di table_persons kita perlu menambahkan bidang baru (type_of_person).
Kesalahan lain (kesalahan jika tidak benar-benar perlu dilakukan) adalah "membagi" tabel, dibaca sebagai: pisahkan satu tabel menjadi dua.
dalam dua tabel
karena Anda memaksa beberapa permintaan untuk bergabung dengan dua tabel dan itu buruk.
sumber