Saya membuat tabel database dan saya tidak memiliki kunci primer logis yang ditugaskan untuk itu. Jadi, saya berpikir untuk meninggalkannya tanpa kunci utama, tetapi saya merasa sedikit bersalah tentang itu. Haruskah saya?
Haruskah setiap tabel memiliki kunci utama?
database
database-design
Daniel Silveira
sumber
sumber
Jawaban:
Jawaban singkat: ya .
Jawaban panjang:
Di MySQL, mesin penyimpanan InnoDB selalu membuat kunci utama jika Anda tidak menentukannya secara eksplisit, sehingga membuat kolom tambahan yang tidak dapat Anda akses.
Perhatikan bahwa kunci utama dapat berupa komposit.
Jika Anda memiliki tabel tautan banyak ke banyak, Anda membuat kunci utama pada semua bidang yang terlibat dalam tautan. Dengan demikian Anda memastikan bahwa Anda tidak memiliki dua atau lebih catatan yang menggambarkan satu tautan.
Selain masalah konsistensi logis, sebagian besar mesin RDBMS akan mendapat manfaat dari memasukkan bidang ini dalam indeks unik.
Dan karena kunci utama apa pun melibatkan pembuatan indeks unik, Anda harus mendeklarasikannya dan mendapatkan konsistensi dan kinerja logis.
Lihat artikel ini di blog saya untuk alasan mengapa Anda harus selalu membuat indeks unik pada data unik:
PS Ada beberapa kasus yang sangat, sangat istimewa di mana Anda tidak memerlukan kunci primer.
Sebagian besar mereka menyertakan tabel log yang tidak memiliki indeks apa pun karena alasan kinerja.
sumber
Selalu yang terbaik untuk memiliki kunci utama. Dengan cara ini memenuhi bentuk normal pertama dan memungkinkan Anda untuk melanjutkan sepanjang jalur normalisasi database .
Seperti yang dinyatakan oleh orang lain, ada beberapa alasan untuk tidak memiliki kunci primer, tetapi sebagian besar tidak akan dirugikan jika ada kunci primer
sumber
Hampir setiap saat saya membuat tabel tanpa kunci primer, berpikir saya tidak akan membutuhkannya, saya akhirnya kembali dan menambahkannya. Saya sekarang membuat bahkan tabel gabung saya dengan bidang identitas yang dibuat secara otomatis yang saya gunakan sebagai kunci utama.
sumber
Kecuali untuk beberapa kasus yang sangat jarang (mungkin tabel hubungan banyak-ke-banyak, atau tabel yang sementara Anda gunakan untuk memuat banyak data dalam jumlah besar), saya akan mengatakan:
Marc
sumber
Cukup tambahkan, Anda akan menyesal nanti ketika tidak melakukannya (memilih, menghapus. Menautkan, dll)
sumber
Apakah Anda perlu bergabung dengan tabel ini ke tabel lain? Apakah Anda memerlukan cara untuk mengidentifikasi catatan secara unik? Jika jawabannya ya, Anda perlu kunci utama. Anggap data Anda seperti tabel pelanggan yang memiliki nama-nama orang yang menjadi pelanggan. Mungkin tidak ada kunci alami karena Anda memerlukan alamat, email, nomor telepon, dll. Untuk menentukan apakah Sally Smith ini berbeda dari Sally Smith dan Anda akan menyimpan informasi itu dalam tabel terkait karena orang tersebut dapat memiliki telepon mulitple, addesses , email, dll. Misalkan Sally Smith menikahi John Jones dan menjadi Sally Jones. Jika Anda tidak memiliki kunci buatan di atas meja, saat memperbarui nama, Anda baru saja mengubah 7 Sally Smiths menjadi Sally Jones meskipun hanya satu dari mereka yang menikah dan mengubah namanya.
Anda mengatakan Anda tidak memiliki kunci alami, oleh karena itu Anda tidak memiliki kombinasi bidang untuk membuat unik juga, ini membuat kunci artfisial kritis.
Saya telah menemukan kapan saja saya tidak memiliki kunci alami, kunci buatan adalah keharusan mutlak untuk menjaga integritas data. Jika Anda memiliki kunci alami, Anda dapat menggunakannya sebagai bidang kunci. Tetapi secara pribadi kecuali kunci natural adalah satu bidang, saya masih lebih suka kunci artifisial dan indeks unik pada kunci alami. Anda akan menyesal nanti jika Anda tidak memasukkannya.
sumber
Ini adalah praktik yang baik untuk memiliki PK di setiap meja, tetapi itu bukan HARUS. Kemungkinan besar Anda akan memerlukan indeks unik, dan / atau indeks berkerumun (yang PK atau tidak) tergantung pada kebutuhan Anda.
Lihat bagian Primary Key dan Indexed Clustered pada Books Online (untuk SQL Server)
" Batasan KUNCI UTAMA mengidentifikasi kolom atau kumpulan kolom yang memiliki nilai yang secara unik mengidentifikasi baris dalam tabel. Tidak ada dua baris dalam tabel yang dapat memiliki nilai kunci utama yang sama. Anda tidak dapat memasukkan NULL untuk kolom apa pun di kunci utama. Kami merekomendasikan menggunakan kolom integer kecil sebagai kunci utama. Setiap tabel harus memiliki kunci primer. Kolom atau kombinasi kolom yang memenuhi syarat sebagai nilai kunci primer disebut sebagai kunci kandidat. "
Tetapi kemudian periksa juga: http://www.aisintl.com/case/primary_and_foreign_key.html
sumber
Tidak setuju dengan jawaban yang disarankan. Jawaban singkatnya adalah: TIDAK .
Tujuan dari kunci utama adalah untuk mengidentifikasi secara unik baris di atas meja untuk membentuk hubungan dengan tabel lain. Secara tradisional, nilai integer yang ditambahkan secara otomatis digunakan untuk tujuan ini, tetapi ada variasi untuk ini.
Namun ada beberapa kasus, misalnya mencatat data seri waktu, di mana keberadaan kunci semacam itu sama sekali tidak diperlukan dan hanya menghabiskan memori. Membuat baris yang unik tidak perlu ...!
Contoh kecil: Tabel A: LogData
Tidak diperlukan Kunci Primer.
Tabel B: Pengguna
Kunci Utama (Id) diperlukan agar dapat digunakan sebagai "kunci asing" ke tabel LogData.
sumber
Saya tahu bahwa untuk menggunakan fitur-fitur tertentu dari gridview di .NET, Anda memerlukan kunci utama agar gridview mengetahui baris mana yang perlu diperbarui / dihapus. Praktik umum harus memiliki kunci primer atau kluster kunci primer. Saya pribadi lebih suka yang pertama.
sumber
Untuk membuatnya menjadi bukti di masa depan, Anda harus melakukannya. Jika Anda ingin meniru, Anda memerlukannya. Jika Anda ingin bergabung ke meja lain hidup Anda (dan orang-orang bodoh yang harus mempertahankannya tahun depan) akan jauh lebih mudah.
sumber
Saya berperan menjaga aplikasi yang dibuat oleh tim pengembangan luar negeri. Sekarang saya memiliki semua jenis masalah dalam aplikasi karena skema database asli tidak mengandung tombol utama pada beberapa tabel. Jadi tolong jangan biarkan orang lain menderita karena desain Anda yang buruk. Itu selalu ide yang baik untuk memiliki kunci utama di atas meja.
sumber
Saya selalu memiliki kunci utama, bahkan jika pada awalnya saya belum memiliki tujuan untuk itu. Ada beberapa kali ketika saya akhirnya membutuhkan PK di meja yang tidak memiliki PK dan selalu lebih sulit untuk memasukkannya nanti. Saya pikir ada lebih banyak sisi positif untuk selalu menyertakan satu.
sumber
Singkatnya, tidak. Namun, Anda harus ingat bahwa klien tertentu dapat mengakses operasi CRUD. Untuk pemeriksaan di masa depan, saya cenderung selalu menggunakan kunci utama.
sumber
Jika Anda menggunakan Hibernasi, itu tidak mungkin untuk membuat Entitas tanpa kunci utama. Masalah ini dapat menimbulkan masalah jika Anda bekerja dengan database yang sudah ada yang dibuat dengan skrip sql / ddl biasa, dan tidak ada kunci primer yang ditambahkan
sumber