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 manaorderID
adalah FK. BTW, PK ini bisa dibilang "alami": -
orderHistory
memiliki PK pengganti:{orderHistoryID}
, sedangkanorderID
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.