Dalam banyak desain basis data relasional ada bidang yang direferensikan di tabel lain.
Misalnya, pertimbangkan tabel pengguna dengan nama pengguna unik dan tabel kedua yang menyimpan data alamat.
Satu tata letak yang mungkin, yang akan saya katakan adalah pendekatan umum, karena saya telah mengamati di sebagian besar perangkat lunak, adalah menggunakan id kenaikan otomatis seperti ini:
Table users
===========
userId int primary auto_increment
userName varchar unique
Table adressdata
==========
userId int references users.userId
adress_type varchar // for example country
address_value varchar // for example US
(you probably also want to put a unique key on (userId,adress_type))
Ini adalah bagaimana saya melakukannya dan bagaimana saya melihatnya dalam banyak kasus.
Cara lain adalah:
Table users
===========
userName varchar primary
Table adressdata
==========
userName varchar references users.userName
adress_type varchar // for example country
address_value varchar // for example US
(you probably also want to put a unique key on (userName,adress_type))
Di sini kami menyimpan nama pengguna lengkap juga di tabel adressdata.
Bagi saya ini memiliki keuntungan sebagai berikut:
Anda dapat memilih nama pengguna langsung dari tabel tanpa harus bergabung ke tabel lain. Dalam contoh ini ini dari sudut pandang aplikasi mungkin tidak begitu relevan, tetapi ini hanya contoh.
Mungkin lebih mudah untuk skala database dalam lingkungan replikasi master-master, karena tidak ada konflik auto_increment.
Tetapi juga kerugiannya:
- Persyaratan ruang untuk indeks dan data (tetapi yang lebih relevan mungkin adalah indeks) pada bidang di tabel kedua lebih tinggi.
- Perubahan nama pengguna perlu disebarkan ke semua tabel, yang lebih memakan sumber daya daripada hanya mengubahnya dalam satu tabel dan membiarkan id seperti apa adanya.
Menurut pendapat saya, jauh lebih mudah untuk bekerja dengan bidang teks dan tidak menggunakan id kenaikan, dan pertukarannya minimal dan dalam sebagian besar aplikasi tidak relevan.
Tentu saja beberapa objek ADALAH diidentifikasi dengan nomor yang bertambah berdasarkan sifatnya (misalnya posting forum harus menerima id yang bertambah karena mungkin tidak ada bidang unik lain seperti judul atau lebih).
Tetapi saya sebelum saya mulai merancang tata letak basis data saya dengan cara yang sangat berbeda, saya ingin tahu apakah ada hal-hal yang tidak saya pikirkan.
Apakah ada praktik terbaik?
Apakah ada pro / kontra yang tidak saya pikirkan dan efeknya mungkin muncul di waktu kemudian?
Bagaimana Anda secara pribadi merancang basis data mengenai poin-poin di atas dan mengapa?