Tidak, itu membuat hubungan "satu ke nol atau satu". Apakah itu yang sebenarnya Anda butuhkan?
Jika ya , maka "solusi kedua" Anda lebih baik:
- lebih sederhana,
- membutuhkan lebih sedikit penyimpanan (dan karenanya membuat cache "lebih besar")
- lebih sedikit indeks yang harus dipelihara, yang menguntungkan manipulasi data,
- dan (karena Anda menggunakan InnoDB) secara alami kelompok data, sehingga akun pengguna yang berdekatan juga akan disimpan berdekatan, yang mungkin bermanfaat bagi lokalitas cache dan jenis pemindaian rentang tertentu.
BTW, Anda harus membuat accounts.id
bilangan bulat biasa (bukan kenaikan otomatis) agar ini berfungsi.
Jika tidak , lihat di bawah...
Yah, "terbaik" adalah kata yang kelebihan beban, tetapi solusi "standar" akan sama seperti di database lain:letakkan kedua entitas (pengguna dan akun dalam kasus Anda) di tabel fisik yang sama.
Secara teoritis, Anda bisa membuat FK melingkar di antara dua PK, tetapi itu akan membutuhkan ditangguhkan kendala untuk menyelesaikan masalah ayam dan telur, yang sayangnya tidak didukung di bawah MySQL.
Saya tidak memiliki banyak pengalaman praktis dengan alat pemodelan khusus itu, tetapi saya kira itu karena ini adalah "satu ke banyak" di mana sisi "banyak" dibatasi pada 1 dengan membuatnya unik. Harap diingat bahwa "banyak" tidak berarti "1 atau banyak", itu berarti "0 atau banyak", jadi versi "capped" benar-benar berarti "0 atau 1".
Tidak hanya dalam biaya penyimpanan untuk bidang tambahan, tetapi juga untuk indeks sekunder. Dan karena Anda menggunakan InnoDB yang selalu mengelompokkan tabel , berhati-hatilah karena indeks sekunder bahkan lebih mahal di tabel berkerumun daripada di tabel berbasis tumpukan.
InnoDB memerlukan indeks pada kunci asing.