Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

desain database satu-ke-banyak-ke-banyak

Anda harus selalu memulai dengan mendesain tabel Anda dalam bentuk normal ketiga (3NF). Ini cukup dapat diterima untuk kembali ke bentuk yang lebih rendah (biasanya untuk alasan kinerja) asalkan Anda memahami dan mengurangi dampaknya, tetapi mulai dengan 3NF.

Aturan (sedikit disederhanakan) untuk diingat adalah bahwa setiap kolom non-kunci dalam tabel harus bergantung pada:

  • kuncinya,
  • seluruh kunci,
  • dan hanya kuncinya,
  • "jadi bantu aku, Codd" - sedikit humor DBA (dan maksudku "sedikit").

Pertanyaan pertama cukup sederhana.

Hubungan satu-ke-banyak paling baik direpresentasikan sebagai kunci asing dalam tabel "banyak". Jadi apa yang Anda usulkan masuk akal. Ini memungkinkan Anda untuk membatasi hubungan secara otomatis. Jika Anda memiliki tabel penggabungan terpisah (digunakan untuk banyak-ke-banyak), Anda perlu menggunakan "tipuan" untuk menegakkan hubungan satu-ke-banyak.

Mengenai pertanyaan kedua Anda, Anda perlu melihat aturan "Codd" di atas dan berpikir sendiri:apa sebenarnya yang diwakili oleh baris-baris ini di setiap tabel? Jika tindakan item kerja adalah objek yang berbeda dari item kerja (mungkin berhubungan tetapi, jika mereka tidak mewakili objek yang sama, mereka berbeda), mereka harus berada di tabel yang berbeda.

Selain itu, tampaknya Anda memiliki hubungan satu-ke-banyak di sana (satu item dapat memiliki banyak tindakan) sehingga mereka harus berada di tabel yang berbeda karena alasan itu saja.

Mengenai pertanyaan Anda tentang info yang berlebihan:jika mereka benar-benar adalah berlebihan, mereka harus diperbaiki.

Menggunakan step_num sebagai contoh, apa sebenarnya yang diwakili ini? Jika itu adalah atribut dari item kerja, seharusnya tidak ada dalam aksi kerja meja sama sekali.

Anda akan menyingkirkannya dari sana dan, jika Anda ingin mengetahui nomor langkah untuk sebuah baris dalam tabel tindakan kerja, Anda akan bergabung dengan tabel item pekerjaan menggunakan kunci asing.

Jika itu adalah atribut dari tindakan kerja, Anda harus menghapusnya dari tabel item kerja karena tidak masuk akal. Anda mungkin memiliki dua tindakan masing-masing dengan nomor langkah yang berbeda, jadi berapa nomor langkah item induk dalam kasus tersebut?

Tentu saja, Anda mungkin memiliki berbeda nomor langkah untuk kedua item dan tindakan - dalam hal ini, saya akan mempertimbangkan mengganti nama untuk memperjelas maksudnya, seperti item_step_num dan action_step_num .

Intinya adalah memulai dengan 3NF. Jika pada titik tertentu database Anda berjalan terlalu lambat, maka pertimbangkan pengembalian ke bentuk yang lebih rendah. Anda kemudian dapat meminta yang lain pertanyaan di sini tentang bagaimana mengenali dan mengurangi masalah yang timbul dari itu (misalnya, kemungkinan data yang tidak konsisten di dua tempat, dan menggunakan pemicu untuk mencegahnya).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara memperbaiki file ekspor Oracle (.dmp) yang rusak?

  2. Bagaimana cara menghitung kueri berdasarkan hari di Oracle sql

  3. Cara Mendapatkan Abad dari Tanggal di Oracle

  4. Tambahkan Kolom yang Mewakili Penggabungan Dua Kolom Varchar Lainnya

  5. Cara mengekstrak nomor minggu di sql