Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Pemodelan basis data untuk entitas yang lemah

Entitas tidak lemah karena tidak dapat berdiri sendiri, tetapi karena tidak dapat diidentifikasi secara mandiri. Oleh karena itu, hubungan yang "mengarahkan" ke entitas yang lemah disebut hubungan "pengidentifikasi". Dalam praktiknya, ini berarti kunci utama induk dimigrasikan ke (biasanya proper ) subset dari PK turunan (istilah "entitas lemah" biasanya didefinisikan dalam kaitannya dengan kunci utama, meskipun secara teori dapat diterapkan pada kunci apa pun).

Sangat sah untuk memiliki entitas yang tidak dapat eksis secara independen, tetapi dapat diidentifikasi secara independen - dengan kata lain, yang berada dalam hubungan non-identifikasi ke non-NULL.

Anda harus bertanya:dapatkah historyLineID menjadi unik sendiri , atau dikombinasikan dengan orderID ? Saya menduga yang terakhir adalah kasusnya, yang akan membuatnya menjadi entitas yang lemah.

Apa yang Anda tunjukkan kepada kami bukanlah entitas yang lemah - PK orang tua tidak dipindahkan ke PK anak.

Pada dasarnya Anda memiliki dua opsi:

  • orderHistory memiliki PK gabungan:{orderID, historyLineID} , di mana orderID adalah FK. BTW, PK ini bisa dibilang "alami":

  • orderHistory memiliki PK pengganti:{orderHistoryID} , sedangkan orderID berada di luar PK. Anda masih harus memiliki kunci alternatif {orderID, historyLineID} meskipun:

Ya, ini adalah opsi pertama yang dijelaskan di atas. Kecuali Anda memiliki hubungan anak di orderHistory sendiri, ini juga merupakan solusi terbaik. Jika orderHistory memiliki anak, maka ini mungkin atau mungkin bukan solusi terbaik, tergantung pada beberapa faktor.

Ini bukan baik-atau. Bidang dapat berupa FK dan bagian dari kunci (utama atau alternatif), seperti yang ditunjukkan di atas.

Anda tidak akan dapat mencapai 3NF kecuali jika Anda menentukan kunci dengan benar, dan Anda tidak akan dapat melakukannya tanpa mempertimbangkan entitas mana yang dapat diidentifikasi secara independen dan mana yang tidak.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tautan dinamis MySQL untuk mengambil baris kanan

  2. MySQL - prosedur tersimpan mengembalikan nilai yang tidak terduga

  3. Bagaimana Benchmark Kinerja MySQL Menggunakan SysBench

  4. Menyimpan csv di bidang MySQL – ide buruk?

  5. CakePHP - jalankan kueri terakhir