Saya telah melihat dalam beberapa proyek bahwa pengembang lebih suka menyimpan informasi pengguna yang penting dalam satu tabel (email / login, kata sandi hash, nama layar) dan sisa profil pengguna yang tidak penting di yang lain (tanggal pembuatan, negara, dll). Yang tidak penting maksud saya bahwa data ini hanya diperlukan sesekali. Manfaat yang jelas adalah bahwa jika Anda menggunakan kueri ORM, bidang yang kurang jelas baik. Tapi kemudian Anda dapat memiliki dua entitas yang dipetakan ke tabel yang sama dan ini akan menyelamatkan Anda dari pertanyaan hal-hal yang tidak Anda butuhkan (sambil lebih nyaman) Adakah yang tahu ada manfaat lain dari menyimpan semua ini dalam dua tabel?
database
database-design
Andrey
sumber
sumber
Jawaban:
Itu tergantung pada ukuran dan persyaratan proyek Anda.
Saya dapat melihat satu cara di mana data tentang pengguna dapat dibagi menjadi dua set, dengan tujuan dan persyaratan yang berbeda:
Perhatikan bahwa ada beberapa atribut tentang pengguna yang dapat jatuh dalam kategori baik (misalnya tanggal lahir pengguna). Perbedaan antara kedua set ini adalah bahwa yang pertama dikontrol dengan ketat dan hanya melalui alur kerja tertentu yang dapat dimodifikasi. Misalnya, mengubah kata sandi mungkin memerlukan penyediaan kata sandi yang ada, mengubah email mungkin memerlukan verifikasi email, dan itu akan digunakan jika pengguna lupa kata sandi.
Preferensi tidak memerlukan ACL seperti itu, dan secara teoritis dapat dimodifikasi oleh pengguna atau aplikasi lain selama pengguna menyetujuinya. Taruhannya rendah jika aplikasi jahat atau karena bug merusak data atau mencoba memodifikasinya (dengan asumsi langkah-langkah keamanan lain diambil.) Namun, biasanya akan menjadi bencana jika nama pengguna, kata sandi, atau email dapat dimodifikasi karena mereka dapat digunakan untuk mengambil identitas pengguna atau menolak layanan atau menyebabkan biaya dukungan, dll. untuk admin.
Dengan demikian, biasanya data disimpan dalam dua jenis sistem:
Karena itu, dalam praktiknya, orang akan melanggar aturan-aturan ini dan menggunakan satu atau yang lain (misalnya SQL server di belakang penyedia keanggotaan ASP.NET).
Ketika data identitas menjadi lebih besar atau organisasi yang menggunakannya menjadi lebih besar, berbagai jenis masalah merayap masuk. Misalnya, dalam kasus direktori, itu akan mencoba mereplikasi perubahan kata sandi segera ke semua server dalam lingkungan multi-server. Namun, preferensi pengguna hanya membutuhkan konsistensi akhirnya. (FYI: Keduanya adalah optimasi yang berbeda dari teorema CAPS.)
Akhirnya, direktori (khususnya direktori online / cloud) juga akan mengeluarkan token akses untuk sumber daya lain menggunakan protokol seperti OAUTH (mis. Pertimbangkan Facebook, Google, Akun Microsoft, ADFS), sedangkan database tidak memerlukannya. Basis data akan mendukung gabungan dan struktur kueri yang cukup rumit, yang direktori tidak perlu.
Untuk lebih jelasnya, beberapa pencarian di direktori identitas vs database akan membantu.
Akhirnya tergantung pada apa skenario Anda dan diharapkan di masa depan, termasuk integrasi dengan pihak ketiga (dan apa yang mereka gunakan). Jika ini adalah proyek yang lengkap dan Anda yakin dapat mengamankan data identitas pengguna dan mengotentikasi dengan benar, maka Anda bisa mencari basis data. Kalau tidak, mungkin perlu menyelidiki direktori identitas.
Jika Anda menggunakan DB, IMO, menggunakan satu DB vs dua akhirnya akan turun ke kontrol akses, baik untuk pengguna dan aplikasi.
sumber
Ada, setidaknya, tiga kasus ketika memiliki tabel orang untuk atribut dasar dan tabel kedua untuk atribut lain dengan hubungan satu-ke-satu, diinginkan:
Saya pikir case yang Anda paparkan cocok dalam case kedua.
sumber
Alasan utama saya untuk memisahkan mereka adalah untuk mencoba dan menghindari apa yang dikenal dalam pemrograman Berorientasi Objek sebagai 'kelas dewa'. ORM menghubungkan tabel dan bidang dengan kelas dan atribut, sehingga menjadi relevan sebagai level SQL juga (bahkan tanpa ORM ada prinsip yang sama pada umumnya).
Kelas Pengguna (dan berdasarkan asosiasi tabel pengguna) sering tabel yang menjadi kelas dewa dengan ratusan atribut / bidang, puluhan atau ratusan metode dan definisi kelas (untuk metode) lebih dari 1000 baris. Aku sudah melihat semuanya. Lebih dari sekali.
Jadi pemisahan dari pengguna mencoba untuk mengatasinya. Mungkin ada orang, pengguna, akun dan pemisahan kekhawatiran mungkin tampak sedikit buatan tetapi untuk mencoba dan menghindari kerumitan dan memastikan bahwa setiap objek hanya memperhatikan 1 aspek data.
sumber