Saya belum dapat sepenuhnya memahami perbedaan. Bisakah Anda menggambarkan kedua konsep dan menggunakan contoh dunia nyata?
Saya belum dapat sepenuhnya memahami perbedaan. Bisakah Anda menggambarkan kedua konsep dan menggunakan contoh dunia nyata?
Jawaban:
Hubungan yang mengidentifikasi adalah ketika keberadaan baris di tabel anak tergantung pada baris di tabel induk. Ini mungkin membingungkan karena ini adalah praktik yang umum hari ini untuk membuat pseudokey untuk tabel anak, tetapi tidak membuat kunci asing ke bagian induk dari kunci utama anak. Secara formal, cara "benar" untuk melakukan ini adalah menjadikan kunci asing bagian dari kunci primer anak. Tetapi hubungan logisnya adalah bahwa anak itu tidak dapat ada tanpa orangtua.
Contoh: A Person
memiliki satu atau lebih nomor telepon. Jika mereka hanya memiliki satu nomor telepon, kita bisa menyimpannya di kolom Person
. Karena kami ingin mendukung beberapa nomor telepon, kami membuat tabel kedua PhoneNumbers
, yang kunci utamanya mencakup person_id
referensi Person
tabel.
Kita mungkin menganggap nomor telepon milik seseorang, meskipun mereka dimodelkan sebagai atribut dari tabel yang terpisah. Ini adalah petunjuk kuat bahwa ini adalah hubungan yang mengidentifikasi (bahkan jika kita tidak benar-benar memasukkan person_id
kunci utama PhoneNumbers
).
Hubungan yang tidak mengidentifikasi adalah ketika atribut kunci utama orang tua tidak boleh menjadi atribut kunci primer anak. Contoh yang baik dari ini adalah tabel pencarian, seperti kunci asing pada Person.state
referensi kunci utama States.state
. Person
adalah meja anak sehubungan dengan States
. Tetapi baris dalam Person
tidak diidentifikasi oleh state
atributnya. Yaitu state
bukan bagian dari kunci utama Person
.
Hubungan yang tidak mengidentifikasi dapat bersifat opsional atau wajib , yang berarti kolom kunci asing masing-masing memungkinkan NULL atau melarang NULL.
Lihat juga jawaban saya untuk Masih Bingung Tentang Mengidentifikasi vs Hubungan Tidak Mengidentifikasi
Beds
tabel untuk semua tempat tidur di sebuah bangunan tertentu tanpa melakukan apa pun bergabung.
user_id
harus menjadi kunci utama dengan sendirinya, dan updated_by
bukan bagian dari kunci utama multi-kolom.
Ada penjelasan lain dari dunia nyata:
Buku milik pemilik, dan pemilik dapat memiliki banyak buku. Tapi, buku itu bisa ada juga tanpa pemiliknya, dan kepemilikannya bisa berubah dari satu pemilik ke pemilik lainnya. Hubungan antara buku dan pemilik adalah hubungan yang tidak mengidentifikasi.
Namun, sebuah buku ditulis oleh seorang penulis, dan si penulis bisa saja menulis banyak buku. Tapi, buku itu perlu ditulis oleh seorang penulis - buku itu tidak akan ada tanpa penulis. Oleh karena itu, hubungan antara buku dan penulis adalah hubungan yang mengidentifikasi.
PK(Book.id, Book.person_id)
.
the Identifying relationship
!!! ya sebuah buku tidak dapat ditulis tanpa penulis tetapi, bidang penulis di tabel buku TIDAK MENGIDENTIFIKASI baris buku !!!
Jawaban Bill benar, tetapi mengejutkan melihat bahwa di antara semua jawaban lain tidak ada yang menunjukkan aspek yang paling signifikan.
Dikatakan berulang-ulang, bahwa dalam dan mengidentifikasi hubungan anak tidak akan ada tanpa orangtua. (mis. user287724 ). Ini benar, tetapi sepenuhnya melenceng. Akan cukup bagi kunci asing untuk menjadi non-nol untuk mencapai ini. Tidak perlu menjadi bagian dari kunci utama.
Jadi inilah alasan sebenarnya:
Tujuan dari hubungan identifikasi adalah bahwa kunci asing tidak PERNAH MENGUBAH , karena itu adalah bagian dari kunci utama ... karena itu mengidentifikasi !!!
Hubungan Mengidentifikasi menentukan bahwa objek anak tidak dapat ada tanpa objek induk
Hubungan yang tidak mengidentifikasi menentukan hubungan teratur antara objek, 1: 1 atau 1: n kardinalitas.
Hubungan yang tidak mengidentifikasi dapat ditentukan sebagai opsional di mana orang tua tidak diperlukan atau wajib di mana orang tua diperlukan dengan mengatur kardinalitas tabel induk ...
House
memiliki Wall
s. Anda menghapus rumah dan Anda tidak punya dinding. Tapi tembok hanya milik rumah. Jadi melakukan hubungan yang kuat tidak akan berhasil: PK(Wall.id, House.id)
akan memungkinkan Anda untuk memasukkan ke dalam model dinding yang sama ke rumah lain.
Berikut deskripsi yang bagus:
Hubungan antara dua entitas dapat diklasifikasikan sebagai "mengidentifikasi" atau "tidak mengidentifikasi". Identifikasi hubungan ada ketika kunci utama entitas induk dimasukkan dalam kunci utama entitas anak. Di sisi lain, hubungan non-identifikasi ada ketika kunci utama entitas induk dimasukkan dalam entitas anak tetapi bukan sebagai bagian dari kunci primer entitas anak. Selain itu, hubungan yang tidak mengidentifikasi lebih lanjut dapat diklasifikasikan sebagai "wajib" atau "tidak wajib". Hubungan wajib mengidentifikasi tidak ada ketika nilai dalam tabel anak tidak bisa nol. Di sisi lain, hubungan non-wajib non-wajib ada ketika nilai dalam tabel anak bisa nol.
http://www.sqlteam.com/article/database-design-and-modeling-fundamentals
Berikut adalah contoh sederhana dari hubungan identifikasi:
Parent
------
ID (PK)
Name
Child
-----
ID (PK)
ParentID (PK, FK to Parent.ID) -- notice PK
Name
Berikut ini adalah hubungan yang tidak mengidentifikasi:
Parent
------
ID (PK)
Name
Child
-----
ID (PK)
ParentID (FK to Parent.ID) -- notice no PK
Name
jawaban user287724 memberikan contoh hubungan buku dan penulis berikut:
Namun sebuah buku ditulis oleh seorang penulis, dan penulis dapat menulis banyak buku. Tetapi buku itu harus ditulis oleh seorang pengarang. Buku itu tidak bisa ada tanpa seorang pengarang. Oleh karena itu hubungan antara buku dan penulis adalah hubungan yang mengidentifikasi.
Ini adalah contoh yang sangat membingungkan dan jelas bukan contoh yang valid untuk identifying relationship
.
Ya, book
tidak dapat ditulis tanpa setidaknya satu author
, tetapi author
(itu kunci asing) dari book
yang tidak MENGIDENTIFIKASI yang book
di books
meja!
Anda dapat menghapus author
(FK) dari book
baris dan masih dapat mengidentifikasi baris buku oleh beberapa bidang lain ( ISBN
, ID
, ... dll), TAPI TIDAK penulis buku !!
Saya pikir contoh yang valid identifying relationship
akan hubungan antara (tabel produk) dan (tabel detail produk tertentu)1:1
products table
+------+---------------+-------+--------+
|id(PK)|Name |type |amount |
+------+---------------+-------+--------+
|0 |hp-laser-510 |printer|1000 |
+------+---------------+-------+--------+
|1 |viewsonic-10 |screen |900 |
+------+---------------+-------+--------+
|2 |canon-laser-100|printer|200 |
+------+---------------+-------+--------+
printers_details table
+--------------+------------+---------+---------+------+
|Product_ID(FK)|manufacturer|cartridge|color |papers|
+--------------+------------+---------+---------+------+
|0 |hp |CE210 |BLACK |300 |
+--------------+------------+---------+---------+------+
|2 |canon |MKJ5 |COLOR |900 |
+--------------+------------+---------+---------+------+
* please note this is not real data
Dalam contoh ini, Product_ID
dalam printers_details
tabel dianggap sebagai FK referensi products.id
tabel dan JUGA PK dalam printers_details
tabel, ini adalah hubungan identifikasi karena Product_ID
(FK) di tabel printer MENGIDENTIFIKASI baris di dalam tabel anak, kami tidak dapat menghapus yang product_id
dari tabel anak karena kita tidak dapat mengidentifikasi baris lagi karena kami kehilangan itu kunci utama
Jika Anda ingin memasukkannya ke dalam 2 baris:
hubungan yang mengidentifikasi adalah hubungan ketika FK dalam tabel anak dianggap sebagai PK (atau pengidentifikasi) di tabel anak sementara masih referensi tabel induk
Contoh lain mungkin ketika Anda memiliki 3 tabel (impor - produk - negara) dalam impor dan ekspor untuk beberapa basis data negara
The import
meja adalah anak yang memiliki bidang ini (yang product_id
(FK), yang country_id
(FK), jumlah impor, harga, unit diimpor, cara transportasi (udara, laut))
we may use the (
product_id , the
country_id`) untuk mengidentifikasi setiap deretan impor "jika semuanya pada tahun yang sama" di sini kedua kolom dapat menyusun bersama kunci utama dalam tabel anak (impor) dan juga merujuk pada tabel induknya.
Tolong saya senang saya akhirnya memahami konsep identifying relationship
dan non identifying relationship
, jadi tolong jangan katakan saya salah dengan semua suara ini untuk contoh yang benar - benar tidak valid
Ya, secara logis sebuah buku tidak dapat ditulis tanpa penulis, tetapi sebuah buku dapat diidentifikasi tanpa penulis, Bahkan tidak dapat diidentifikasi dengan penulis!
Anda dapat 100% menghapus penulis dari deretan buku dan masih dapat mengidentifikasi buku! .
Hubungan yang tidak mengidentifikasi
Hubungan yang tidak mengidentifikasi berarti bahwa seorang anak terkait dengan orang tua tetapi dapat diidentifikasi sendiri.
PERSON ACCOUNT
====== =======
pk(id) pk(id)
name fk(person_id)
balance
Hubungan antara ACCOUNT dan PERSON tidak mengidentifikasi.
Mengidentifikasi hubungan
Hubungan yang mengidentifikasi berarti bahwa orang tua diperlukan untuk memberikan identitas kepada anak. Anak semata-mata ada karena orangtua.
Ini berarti bahwa kunci asing juga merupakan kunci utama.
ITEM LANGUAGE ITEM_LANG
==== ======== =========
pk(id) pk(id) pk(fk(item_id))
name name pk(fk(lang_id))
name
Hubungan antara ITEM_LANG dan ITEM mengidentifikasi. Dan antara ITEM_LANG dan LANGUAGE juga.
Jika Anda menganggap bahwa item anak harus dihapus ketika orang tua dihapus, maka itu adalah hubungan yang mengidentifikasi.
Jika item anak harus disimpan meskipun orang tua dihapus, maka itu adalah hubungan yang tidak mengidentifikasi.
Sebagai contoh, saya memiliki database pelatihan dengan peserta pelatihan, pelatihan, diploma dan pelatihan:
Hanya sesi pelatihan yang harus dihapus jika salah satu peserta pelatihan, pelatihan atau diploma terkait dihapus.
Hubungan yang teridentifikasi berarti entitas anak sepenuhnya tergantung pada keberadaan entitas induk. Contoh tabel akun orang dan akun orang. Tabel akun orang diidentifikasi oleh keberadaan akun dan tabel orang saja.
Hubungan non pengidentifikasian berarti tabel anak tidak diidentifikasi oleh keberadaan tabel induk misalnya ada tabel sebagai tipe akun dan tabel akun. Tipe akun tidak diidentifikasi dengan keberadaan tabel akun.
Seperti dijelaskan dengan baik di tautan di bawah ini, hubungan identifikasi agak seperti hubungan tipe entitas yang lemah dengan induknya dalam model konseptual ER. CAD gaya UML untuk pemodelan data tidak menggunakan simbol atau konsep ER, dan jenis hubungannya adalah: mengidentifikasi, tidak mengidentifikasi, dan tidak spesifik.
Yang mengidentifikasi adalah hubungan orang tua / anak di mana anak adalah semacam entitas yang lemah (bahkan pada model ER tradisional yang disebutnya mengidentifikasi hubungan), yang tidak memiliki kunci primer nyata dengan atributnya sendiri dan oleh karena itu tidak dapat diidentifikasi secara unik oleh miliknya sendiri. . Setiap akses ke tabel anak, pada model fisik, akan tergantung (termasuk secara semantik) pada kunci utama orang tua, yang berubah menjadi bagian atau total kunci primer anak (juga menjadi kunci asing), umumnya menghasilkan kunci komposit di sisi anak. Kunci anak yang ada pada akhirnya itu sendiri hanya pseudo atau kunci parsial, tidak cukup untuk mengidentifikasi setiap instance dari tipe Entitas atau Entitas Set tersebut, tanpa PK orang tua.
Hubungan non-identifikasi adalah hubungan biasa (parsial atau total), dari set entitas yang sepenuhnya independen, yang instansnya tidak bergantung pada kunci utama masing-masing untuk diidentifikasi secara unik, meskipun mereka mungkin memerlukan kunci asing untuk hubungan parsial atau total, tetapi tidak sebagai kunci utama anak. Anak memiliki kunci utama sendiri. Idem induk. Keduanya mandiri. Tergantung pada kardinalitas hubungan, PK satu berjalan sebagai FK ke yang lain (sisi N), dan jika parsial, bisa nol, jika total, harus tidak nol. Tetapi, pada hubungan seperti ini, FK tidak akan pernah juga menjadi PK dari anak, seperti ketika hubungan identifikasi adalah kasusnya.
http://docwiki.embarcadero.com/ERStudioDA/XE7/en/Creating_and_Editing_Relationships
Do atribut bermigrasi dari orang tua untuk membantu anak mengidentifikasi 1 anak?
Perhatikan bahwa ketergantungan-identifikasi menyiratkan ketergantungan-keberadaan, tetapi tidak sebaliknya. Setiap non-NULL FK berarti seorang anak tidak dapat ada tanpa orang tua, tetapi itu saja tidak membuat hubungan mengidentifikasi.
Untuk lebih lanjut tentang ini (dan beberapa contoh), lihat bagian "Mengidentifikasi Hubungan" pada Panduan Metode ERwin .
PS Saya menyadari bahwa saya (sangat) terlambat ke pesta, tetapi saya merasa jawaban lain tidak sepenuhnya akurat (mendefinisikannya dalam hal ketergantungan-keberadaan alih-alih identifikasi-ketergantungan), atau agak berkelok-kelok. Semoga jawaban ini memberikan lebih banyak kejelasan ...
1 FK anak merupakan bagian dari KUNCI UTAMA anak atau kendala UNIK (non-NULL).
Contoh yang baik datang dari pemrosesan pesanan. Pesanan dari pelanggan biasanya memiliki Nomor Pesanan yang mengidentifikasi pesanan, beberapa data yang terjadi satu kali per pesanan seperti tanggal pesanan dan ID Pelanggan, dan serangkaian item baris. Setiap item baris berisi nomor item yang mengidentifikasi item baris dalam pesanan, produk yang dipesan, jumlah produk itu, harga produk, dan jumlah untuk item baris, yang dapat dihitung dengan mengalikan kuantitas dengan harga.
Nomor yang mengidentifikasi item baris hanya mengidentifikasinya dalam konteks satu urutan. Item baris pertama dalam setiap pesanan adalah nomor item "1". Identitas lengkap item baris adalah nomor item bersama dengan nomor urut yang merupakan bagiannya.
Hubungan anak induk antara pesanan dan item baris karenanya merupakan hubungan yang mengidentifikasi. Konsep yang terkait erat dalam pemodelan ER disebut dengan nama "subentity", di mana item baris adalah subentitas pesanan. Biasanya, subentity memiliki hubungan wajib identitas anak-orangtua dengan entitas yang menjadi bawahannya.
Dalam desain database klasik, kunci utama tabel LineItems adalah (OrderNumber, ItemNumber). Beberapa desainer saat ini akan memberikan item ItemID terpisah, yang berfungsi sebagai kunci utama, dan ditambahkan secara otomatis oleh DBMS. Saya merekomendasikan desain klasik dalam hal ini.
Katakanlah kita memiliki tabel itu:
user
--------
id
name
comments
------------
comment_id
user_id
text
hubungan antara kedua tabel tersebut akan mengidentifikasi hubungan. Karena, komentar hanya bisa menjadi milik pemiliknya, bukan pengguna lain. sebagai contoh. Setiap pengguna memiliki komentar sendiri, dan ketika pengguna dihapus, komentar pengguna ini juga harus dihapus.
Hubungan mengidentifikasi adalah antara dua entitas yang kuat. Hubungan yang tidak mengidentifikasi mungkin tidak selalu merupakan hubungan antara entitas yang kuat dan entitas yang lemah. Mungkin ada situasi di mana seorang anak itu sendiri memiliki kunci utama tetapi keberadaan entitasnya dapat bergantung pada entitas induknya.
Misalnya: hubungan antara penjual dan buku tempat buku dijual oleh penjual mungkin ada di mana penjual mungkin memiliki kunci utama sendiri tetapi entitasnya dibuat hanya ketika buku dijual
Referensi berdasarkan Bill Karwin