ความแตกต่างระหว่างการระบุและการไม่ระบุความสัมพันธ์คืออะไร?


800

ฉันไม่สามารถเข้าใจความแตกต่างได้อย่างเต็มที่ คุณสามารถอธิบายแนวคิดและใช้ตัวอย่างโลกแห่งความจริงได้หรือไม่?


11
คำตอบสำหรับคำถามนี้ทำให้สับสนว่ามันไม่ใช่เรื่องตลก
Dennis

เป็นคำถามที่ดีว่าล้อไม่ได้ถูกคิดค้นใหม่: Peter Chen แบบจำลองความสัมพันธ์เอนทิตีที่มีต่อมุมมองข้อมูลที่รวมเป็นหนึ่งเดียว, 1976 § 2.3.2: " หากความสัมพันธ์ถูกใช้เพื่อระบุเอนทิตี้เราจะเรียกมันว่าเป็นเอนทิตี้ของความอ่อนแอหากความสัมพันธ์ไม่ได้ถูกใช้เพื่อระบุเอนทิตี้ เป็นความสัมพันธ์เอนทิตีปกติ ". คำถาม OP ทำให้เดือดร้อนลงไปที่: อะไรคือความสัมพันธ์เอนทิตี้ที่อ่อนแอ .
นาที

คำตอบ:


1063
  • สัมพันธ์ระบุคือเมื่อการดำรงอยู่ของแถวในตารางเด็กขึ้นอยู่กับแถวในตารางผู้ปกครอง เรื่องนี้อาจจะทำให้เกิดความสับสนเพราะมันของการปฏิบัติร่วมกันในวันนี้ที่จะสร้าง pseudokey สำหรับตารางเด็ก แต่ไม่ได้ทำให้ต่างประเทศที่สำคัญในส่วนที่แม่ของคีย์หลักของเด็ก อย่างเป็นทางการวิธี "สิทธิ" ในการทำเช่นนี้คือการทำให้กุญแจต่างประเทศของคีย์หลักของเด็ก แต่ความสัมพันธ์เชิงตรรกะคือลูกไม่สามารถอยู่ได้โดยปราศจากผู้ปกครอง

    ตัวอย่าง: A Personมีหมายเลขโทรศัพท์หนึ่งหมายเลขขึ้นไป Personถ้าพวกเขามีหมายเลขโทรศัพท์เพียงหนึ่งเราก็สามารถเก็บไว้ในคอลัมน์ของ เนื่องจากเราต้องการสนับสนุนหมายเลขโทรศัพท์หลายหมายเลขเราจึงสร้างตารางที่สองPhoneNumbersซึ่งมีคีย์หลักรวมถึงการperson_idอ้างอิงPersonตาราง

    เราอาจคิดว่าหมายเลขโทรศัพท์เป็นของบุคคลแม้ว่าจะมีการจำลองเป็นแอตทริบิวต์ของตารางแยกต่างหาก นี่เป็นเงื่อนงำที่ชัดเจนว่านี่คือความสัมพันธ์ที่ระบุ (แม้ว่าเราจะไม่รวมperson_idอยู่ในคีย์หลักของPhoneNumbers)

  • ความสัมพันธ์ไม่ได้ระบุคือเมื่อคีย์หลักคุณลักษณะของผู้ปกครองจะต้องไม่กลายเป็นคีย์หลักคุณลักษณะของเด็ก เป็นตัวอย่างที่ดีของที่นี่คือตารางการค้นหาเช่นต่างประเทศที่สำคัญในการอ้างอิงคีย์หลักของ Person.state เป็นตารางเด็กด้วยความเคารพ แต่ไม่มีการระบุแถวในโดยแอตทริบิวต์ของมัน คือไม่ได้เป็นส่วนหนึ่งของคีย์หลักของStates.statePersonStatesPersonstatestatePerson

    ความสัมพันธ์ที่ไม่ระบุตัวตนอาจเป็นทางเลือกหรือจำเป็นซึ่งหมายความว่าคอลัมน์คีย์ภายนอกอนุญาตให้ NULL หรือไม่อนุญาต NULL ตามลำดับ


ดูคำตอบของฉันที่ยังสับสนเกี่ยวกับการระบุและความสัมพันธ์ที่ไม่ระบุตัวตน


9
+1: การเรียกเก็บเงิน "เป็นเรื่องปกติที่ทุกวันนี้จะสร้าง pseudokey สำหรับตารางลูก แต่ไม่ได้สร้างรหัสต่างประเทศให้กับส่วนหลักของคีย์หลักของเด็ก" - ลิงก์ใด ๆ ที่เป็นสาเหตุว่าทำไม Google ทำให้ฉันล้มเหลว
hobodave

17
ดูเหมือนว่าการสร้างความสัมพันธ์ที่ระบุอย่างถูกต้องจะนำไปสู่คีย์หลักขนาดใหญ่ที่น่ารังเกียจ เช่นอาคารมีพื้นมีห้องมีเตียง ค่า PK สำหรับที่พักจะเป็น (bed_id, floor_id, room_id, building_id) มันแปลกที่ฉันไม่เคยเห็นสิ่งนี้มาก่อนในทางปฏิบัติและไม่เคยได้ยินเลยว่ามันเป็นวิธีที่จะทำอะไร นั่นเป็นข้อมูลซ้ำซ้อนจำนวนมากใน PK
hobodave

24
@hododave: ฉันได้เห็นคีย์หลักหลายคอลัมน์ที่ใหญ่กว่า แต่ฉันเอาประเด็นของคุณ พิจารณาว่าปุ่มหลักหลายคอลัมน์นำเสนอข้อมูลเพิ่มเติม คุณสามารถสืบค้นBedsตารางสำหรับเตียงทั้งหมดในอาคารเฉพาะได้โดยไม่ต้องเข้าร่วมใด ๆ
Bill Karwin

2
@Eugene ใช่ฉันคาดหวังว่าจะเป็นความสัมพันธ์ที่ไม่ระบุตัวตน user_idควรเป็นคีย์หลักด้วยตัวเองและupdated_byไม่ได้เป็นส่วนหนึ่งของคีย์หลักหลายคอลัมน์
Bill Karwin

4
ฉันจะไม่ใช้สิ่งนี้กับแบบจำลองนั้น คำตอบที่ดีที่สุดมาจาก "aqsa rao" ด้านล่างซึ่งระบุสิ่งต่อไปนี้: "ความสัมพันธ์ที่ระบุหมายความว่าตารางลูกไม่สามารถระบุได้โดยไม่ต้องมีผู้ปกครอง" เนื่องจากคำจำกัดความของคุณเพิ่มความหมายที่ไม่จำเป็นซึ่งอาจทำให้ผู้คนสับสน ไม่ใช่การพึ่งพาระหว่างเหตุผลที่คุณสร้างความสัมพันธ์ที่ระบุหรือไม่ได้ระบุ
เซบาสเตียน

887

มีคำอธิบายอื่นจากโลกแห่งความเป็นจริง:

หนังสือเป็นของเจ้าของและเจ้าของสามารถเป็นเจ้าของหนังสือหลายเล่มได้ แต่หนังสือเล่มนี้สามารถดำรงอยู่ได้โดยปราศจากเจ้าของและความเป็นเจ้าของสามารถเปลี่ยนจากเจ้าของรายหนึ่งเป็นอีกคนได้ ความสัมพันธ์ระหว่างหนังสือกับเจ้าของเป็นความสัมพันธ์ที่ไม่ระบุตัวตน

อย่างไรก็ตามหนังสือเล่มหนึ่งเขียนขึ้นโดยผู้แต่งและผู้แต่งสามารถเขียนหนังสือหลายเล่มได้ แต่หนังสือเล่มนี้จะต้องเขียนโดยผู้แต่ง - มันไม่มีอยู่จริงถ้าไม่มีผู้แต่ง ดังนั้นความสัมพันธ์ระหว่างหนังสือกับผู้แต่งจึงเป็นความสัมพันธ์ที่ระบุ


2
คำอธิบายที่เหมาะสม แต่ฉันเชื่อว่ามันเป็นคำแนะนำที่จะขยายตัวอย่างเล็กน้อย หนังสือมีหลายหน้า ไม่สามารถมีได้หากไม่มีหน้าเว็บดังนั้นเราจึงสรุปได้ว่าความสัมพันธ์ระหว่างหนังสือกับจำนวนหน้ามีความสัมพันธ์ที่ระบุ แต่จำนวนหน้าแอตทริบิวต์จะเป็นส่วนหนึ่งของรูปแบบการระบุตัวตน (คีย์) สำหรับหนังสือหรือไม่ อาจจะไม่. โดยปกติคำว่า "การระบุความสัมพันธ์" จะถูกสงวนไว้สำหรับความสัมพันธ์ที่เกี่ยวข้องกับการระบุแอตทริบิวต์ - คุณลักษณะเฉพาะในข้อกำหนดเชิงสัมพันธ์
nvogel

13
จะเกิดอะไรขึ้นถ้าหนังสือเล่มนี้เขียนโดยผู้แต่งมากกว่า 1 คน มันไม่ได้ระบุความสัมพันธ์อีกต่อไปในฐานะประเภท M: N ทำไม?
NGix

2
ตัวอย่างจริงเหล่านี้ไร้ประโยชน์ เมื่อคุณตระหนักถึงวิธีการสร้างตารางใน ER และความสมบูรณ์ของข้อมูลจะเก็บไว้อย่างไรจากนั้นคุณทิ้งตัวอย่างเหล่านี้ หากคุณสร้างความสัมพันธ์ที่ดีระหว่างสองเอนทิตีคุณกำลังบังคับให้สร้างคีย์หลักในตารางเอนทิตีรวมกับ PK จากเอนทิตีอื่น หากแบบจำลองของคุณอนุญาตให้คุณเขียนว่าหนังสือเล่มเดียวกันสามารถมีผู้แต่งหลายคนก็ถือว่าใช้ได้ แต่ถ้ารูปแบบของคุณเพียงช่วยให้คุณ 1 ผู้เขียนหนังสือ 1 เล่มคุณไม่สามารถมีข้อ จำกัด PK(Book.id, Book.person_id)ว่าการใช้ความสัมพันธ์ที่แข็งแกร่งเพราะ
เซบาสเตียน

2
แต่การใช้งานจริงคือ "สามารถจองโดยไม่มีผู้แต่งได้หรือ" คำตอบคือใช่ในความเป็นจริงเพราะผู้คนจะมองหาหนังสือโดยตรง ดังนั้นในทางปฏิบัติสำหรับกรณีนี้พวกเขาควรจะเป็น "ความสัมพันธ์ที่ไม่ระบุตัวตน" เสมอ
windmaomao

3
เกิดอะไรขึ้นกับผู้ชาย !! นี่ไม่ใช่ตัวอย่างที่ถูกต้องสำหรับthe Identifying relationship !!! ใช่หนังสือไม่สามารถเขียนได้หากไม่มีผู้แต่ง แต่เขตข้อมูลผู้เขียนในตารางหนังสือไม่ได้ระบุแถวหนังสือ !!!
นักบัญชี

33

คำตอบของ Billนั้นถูกต้อง แต่ก็น่าตกใจที่เห็นว่าในบรรดาคำตอบอื่น ๆ นั้นไม่มีใครชี้ให้เห็นถึงแง่มุมที่สำคัญที่สุด

ได้มีการกล่าวซ้ำแล้วซ้ำอีกว่าในและการระบุความสัมพันธ์ที่เด็กไม่สามารถอยู่ได้โดยปราศจากผู้ปกครอง (เช่นผู้ใช้287724 ) นี่เป็นเรื่องจริง แต่ก็พลาดประเด็นไปอย่างสิ้นเชิง มันจะเพียงพอสำหรับคีย์ต่างประเทศที่จะไม่เป็นโมฆะเพื่อให้บรรลุนี้ ไม่จำเป็นต้องเป็นส่วนหนึ่งของคีย์หลัก

ดังนั้นนี่คือเหตุผลที่แท้จริง:

วัตถุประสงค์ของการระบุความสัมพันธ์คือกุญแจต่างประเทศไม่สามารถเปลี่ยนแปลงได้เพราะมันเป็นส่วนหนึ่งของคีย์หลัก ... ดังนั้นจึงระบุ !!!


2
+1 สำหรับ "มันจะเพียงพอสำหรับคีย์ต่างประเทศที่จะไม่เป็นโมฆะเพื่อให้ได้สิ่งนี้" มันควรจะเพียงพอ แต่น่าเสียดายที่มันไม่ได้เมื่อมันมาถึงสิ่งที่ต้องการ Entity Framework ซึ่งไม่ทำงานขวาเว้นแต่คุณจะใช้ความสัมพันธ์ที่ระบุ แต่แล้วฟิลด์ "id" ของกิจการสูญเสียมันเป็นเอกลักษณ์เป็นผลมาจากการเป็นเพียงแค่ ส่วนหนึ่งของคีย์ผสม
Triynko

25

การระบุความสัมพันธ์ระบุว่าวัตถุลูกไม่สามารถอยู่ได้โดยไม่ต้องวัตถุแม่

ความสัมพันธ์ที่ไม่ได้ระบุระบุจะระบุความสัมพันธ์ปกติระหว่างวัตถุ, 1: 1 หรือ 1: n ความเป็นเชิงการนับ

สามารถระบุความสัมพันธ์ที่ไม่ระบุตัวตนเป็นทางเลือกโดยไม่จำเป็นต้องมีพาเรนต์หรือบังคับให้มีการบังคับให้ผู้ปกครองต้องมีการตั้งค่าความสำคัญของตาราง ...


6
สิ่งนี้ฟังดูเหมือนเป็นคำอธิบายของการมีส่วนร่วมโดยรวมในความสัมพันธ์มากกว่าความสัมพันธ์ที่ระบุ
Thomas Padron-McCarthy

1
คุณกำลังแข่งขันกับผู้ชายที่มีชื่อเสียง 218k แค่โยนมันออกไปเพราะคุณทั้งคู่รู้มากกว่าฉัน
Marc DiMillo

ฉันไม่เห็นด้วยกับคำจำกัดความข้างต้น คุณอาจมีวัตถุที่ขึ้นอยู่กับพาเรนต์และคุณต้องการให้วัตถุนั้นถูก จำกัด ให้เชื่อมโยงกับ 1 พาเรนต์แถวเท่านั้น A HouseมีWalls คุณลบบ้านและไม่มีผนัง แต่กำแพงเป็นของบ้านเท่านั้น ดังนั้นการสร้างความสัมพันธ์ที่ดีจะไม่ได้ผล: PK(Wall.id, House.id)จะช่วยให้คุณสามารถแทรกโมเดลเข้ากับกำแพงเดียวกันกับบ้านหลังอื่นได้
เซบาสเตียน

15

นี่คือคำอธิบายที่ดี:

ความสัมพันธ์ระหว่างสองหน่วยงานอาจจำแนกได้ว่าเป็น "การระบุ" หรือ "การไม่ระบุตัวตน" การระบุความสัมพันธ์มีอยู่เมื่อคีย์หลักของเอนทิตีหลักรวมอยู่ในคีย์หลักของเอนทิตีรอง ในทางกลับกันความสัมพันธ์ที่ไม่มีการระบุจะมีอยู่เมื่อคีย์หลักของเอนทิตีหลักรวมอยู่ในเอนทิตีรอง แต่ไม่รวมเป็นส่วนหนึ่งของคีย์หลักของเอนทิตีรอง นอกจากนี้ความสัมพันธ์ที่ไม่ระบุตัวตนอาจจำแนกได้ว่าเป็น "ข้อบังคับ" หรือ "ไม่บังคับ" ความสัมพันธ์ที่ไม่ระบุตัวตนที่บังคับมีอยู่เมื่อค่าในตารางลูกไม่สามารถเป็นโมฆะ ในทางกลับกันความสัมพันธ์ที่ไม่ระบุตัวตนที่ไม่บังคับมีอยู่เมื่อค่าในตารางลูกสามารถเป็นโมฆะ

http://www.sqlteam.com/article/database-design-and-modeling-fundamentals

นี่คือตัวอย่างง่ายๆของความสัมพันธ์ที่ระบุ:

Parent
------
ID (PK)
Name

Child
-----
ID (PK)
ParentID (PK, FK to Parent.ID) -- notice PK
Name

นี่คือความสัมพันธ์ที่ไม่ระบุตัวตนที่สอดคล้องกัน:

Parent
------
ID (PK)
Name

Child
-----
ID (PK)
ParentID (FK to Parent.ID) -- notice no PK
Name

1
คำตอบของคุณขัดแย้งกับที่ Bill Karwin มอบให้ในความแตกต่างระหว่างว่าคีย์ต่างประเทศ "ไม่ใช่" หรือ "ต้องไม่" เป็นส่วนหนึ่งของคีย์หลักในแถวลูก
นิโคล

@Andy White แต่คีย์หลักของพาเรนต์ในการระบุความสัมพันธ์อาจไม่บังคับเช่นคือ null เมื่อเป็นส่วนหนึ่งของคีย์หลักแบบรวมสามคอลัมน์
Frederik Krautwald

10

คำตอบของ user287724ให้ตัวอย่างต่อไปนี้ของความสัมพันธ์หนังสือและผู้แต่ง:

อย่างไรก็ตามผู้แต่งเขียนหนังสือเล่มหนึ่งและผู้แต่งสามารถเขียนหนังสือหลายเล่มได้ แต่หนังสือเล่มนี้จะต้องเขียนโดยผู้แต่งไม่สามารถมีอยู่ได้หากไม่มีผู้แต่ง ดังนั้นความสัมพันธ์ระหว่างหนังสือและผู้แต่งจึงเป็นความสัมพันธ์ที่ระบุ

นี้เป็นตัวอย่างที่ทำให้เกิดความสับสนมากและแน่นอนไม่ได้เป็นตัวอย่างที่ถูกต้องidentifying relationshipสำหรับ

ใช่bookไม่สามารถเขียนได้โดยไม่ต้องมีอย่างน้อยหนึ่งauthorแต่author(มันสำคัญต่างประเทศ) ของbookถูกไม่ได้การระบุbookในbooksตาราง!

คุณสามารถลบauthor(FK) จากbookแถวและยังสามารถระบุแถวหนังสือโดยข้อมูลอื่น ๆ บาง ( ISBN, ID... ฯลฯ ) แต่ไม่เขียนของหนังสือเล่มนี้ !!

ฉันคิดว่าตัวอย่างที่ถูกต้องของ a identifying relationshipคือความสัมพันธ์ระหว่าง (ตารางผลิตภัณฑ์) และ a (ตารางรายละเอียดผลิตภัณฑ์เฉพาะ)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

ในตัวอย่างนี้Product_IDในprinters_detailsตารางถือว่าเป็น FK อ้างอิงproducts.idตารางและยัง PKในprinters_detailsตารางนี่คือความสัมพันธ์ที่ระบุเพราะProduct_ID(FK) ในตารางเครื่องพิมพ์จะระบุแถวภายในตารางลูกเราไม่สามารถลบproduct_idจากตารางเด็กเพราะเราไม่สามารถระบุแถวใด ๆ มากขึ้นเพราะเราหายไปมันเป็นคีย์หลัก

หากคุณต้องการที่จะวางไว้ใน 2 บรรทัด:

ความสัมพันธ์ที่ระบุคือความสัมพันธ์เมื่อ FK ในตารางลูกถูกพิจารณาว่าเป็น PK (หรือตัวระบุ) ในตารางลูกในขณะที่ยังคงอ้างอิงตารางแม่

อีกตัวอย่างหนึ่งคือเมื่อคุณมี 3 ตาราง (นำเข้า - ผลิตภัณฑ์ - ประเทศ) ในการนำเข้าและส่งออกสำหรับฐานข้อมูลบางประเทศ

importตารางเป็นเด็กที่มีเขตข้อมูลเหล่านี้ ( product_id(FK) ที่country_id(FK) ปริมาณการนำเข้าที่ราคาหน่วยที่นำเข้าทางของการขนส่ง (อากาศทะเล)) ที่ we may use the (product_id , thecountry_id`) เพื่อระบุแต่ละ แถวของการนำเข้า "ถ้าพวกเขาทั้งหมดในปีเดียวกัน" ที่นี่ทั้งสองคอลัมน์สามารถเขียนคีย์หลักร่วมกันในตารางลูก (นำเข้า) และยังอ้างอิงถึงตารางแม่

ได้โปรดฉันมีความสุขในที่สุดฉันก็เข้าใจแนวคิดของidentifying relationshipและnon identifying relationshipดังนั้นโปรดอย่าบอกฉันว่าฉันผิดกับการลงคะแนนเสียงทั้งหมดเหล่านี้สำหรับตัวอย่างที่ไม่ถูกต้องอย่างสมบูรณ์

ใช่มีเหตุผลที่หนังสือไม่สามารถเขียนได้หากไม่มีผู้แต่ง แต่สามารถระบุได้โดยที่ไม่มีผู้แต่งหนังสือจริงๆแล้วมันไม่สามารถระบุได้กับผู้แต่ง!

คุณสามารถลบผู้แต่งได้ 100% จากแถวหนังสือและยังสามารถระบุหนังสือได้! .


5
ถูกต้องถ้าคุณมีหนังสือและผู้แต่งแบบตารางเท่านั้น ไม่มีความสัมพันธ์ที่ระบุมี แต่ถ้าคุณใช้ตารางที่สามเพื่อแสดงความสัมพันธ์แบบกลุ่มต่อกลุ่มคีย์หลักของตารางที่สามนั้นประกอบด้วยคีย์ต่างประเทศสองชุดซึ่งอ้างอิงตารางหนังสือและตารางผู้แต่ง ตารางนั้นมีความสัมพันธ์ที่ระบุถึงทั้งหนังสือและผู้แต่ง ดูตัวอย่างของฉันในstackoverflow.com/questions/2814469/…
Bill Karwin

8

ความสัมพันธ์ที่ไม่ได้ระบุ

ความสัมพันธ์ที่ไม่ระบุตัวตนหมายความว่าเด็กมีความสัมพันธ์กับผู้ปกครอง แต่สามารถระบุได้ด้วยตนเอง

PERSON    ACCOUNT
======    =======
pk(id)    pk(id)
name      fk(person_id)
          balance

ความสัมพันธ์ระหว่าง ACCOUNT และ PERSON ไม่มีการระบุ

การระบุความสัมพันธ์

การระบุความสัมพันธ์หมายความว่าผู้ปกครองจำเป็นต้องให้ข้อมูลประจำตัวกับเด็ก เด็กมี แต่เพียงผู้เดียวเนื่องจากผู้ปกครอง

ซึ่งหมายความว่า foreign key เป็นคีย์หลักเช่นกัน

ITEM      LANGUAGE    ITEM_LANG
====      ========    =========
pk(id)    pk(id)      pk(fk(item_id))
name      name        pk(fk(lang_id))
                      name

ความสัมพันธ์ระหว่าง ITEM_LANG และ ITEM กำลังระบุ และระหว่าง ITEM_LANG และ LANGUAGE ด้วย


2
PERSON และ ACCOUNT ไม่มีวิธีระบุตัวตนอย่างไร ACCOUNT มีอยู่ได้อย่างไรหากไม่มี PERSON
MrRobot9

ทำไมไม่มีคำตอบสำหรับความคิดเห็นก่อนหน้า? @ MrRobot9
AAEM

4

หากคุณพิจารณาว่าควรลบไอเท็มลูกออกเมื่อลบพาเรนต์ดังนั้นจึงเป็นความสัมพันธ์ที่ระบุ

หากรายการเด็กควรถูกเก็บไว้แม้ว่าผู้ปกครองจะถูกลบแล้วมันเป็นความสัมพันธ์ที่ไม่ระบุตัวตน

ตัวอย่างเช่นฉันมีฐานข้อมูลการฝึกอบรมที่มีผู้ฝึกอบรมการฝึกอบรมประกาศนียบัตรและการฝึกอบรม:

  • ผู้เข้ารับการฝึกอบรมมีความสัมพันธ์กับการฝึกอบรมระบุ
  • การฝึกอบรมมีความสัมพันธ์ที่ระบุกับการฝึกอบรม
  • แต่ผู้รับการฝึกอบรมมีความสัมพันธ์แบบไม่ระบุตัวตนกับประกาศนียบัตร

ควรลบเฉพาะช่วงการฝึกอบรมหากหนึ่งในผู้ฝึกอบรมที่เกี่ยวข้องการฝึกอบรมหรือประกาศนียบัตรถูกลบ


3

การระบุความสัมพันธ์หมายถึงเอนทิตีลูกขึ้นอยู่กับการมีอยู่ของเอนทิตีของแม่ ตัวอย่างตารางบัญชีบุคคลตารางและ personaccount ตารางบัญชีบุคคลจะถูกระบุโดย existance ของบัญชีและตารางบุคคลเท่านั้น

ความสัมพันธ์ที่ไม่ระบุตัวตนหมายถึงตารางลูกไม่ได้ระบุโดยการมีอยู่ของตัวอย่างตารางหลักที่มีตารางเป็นบัญชีและตาราง account.accounttype ไม่ได้ระบุว่ามีอยู่ของตารางบัญชี


2

เช่นเดียวกับที่อธิบายไว้อย่างดีในลิงก์ด้านล่างความสัมพันธ์ที่ระบุนั้นค่อนข้างคล้ายกับประเภทเอนทิตีที่อ่อนแอกับความสัมพันธ์กับผู้ปกครองในโมเดลแนวคิดเชิง ER CAD สไตล์ UML สำหรับการสร้างแบบจำลองข้อมูลไม่ได้ใช้สัญลักษณ์หรือแนวคิด ER และประเภทของความสัมพันธ์คือ: การระบุการไม่ระบุตัวตนและไม่เฉพาะเจาะจง

การระบุตัวตนคือความสัมพันธ์ของผู้ปกครอง / เด็กที่เด็กเป็นนิติบุคคลที่อ่อนแอ (แม้แต่ในรูปแบบ ER ดั้งเดิมที่เรียกว่าการระบุความสัมพันธ์) ซึ่งไม่มีคีย์หลักที่แท้จริงด้วยคุณสมบัติของตัวเองและดังนั้นจึงไม่สามารถระบุเอกลักษณ์ของตนเองได้ . การเข้าถึงตารางเด็กทุกครั้งในแบบจำลองทางกายภาพจะขึ้นอยู่กับ (รวมถึงความหมาย) ในคีย์หลักของผู้ปกครองซึ่งจะกลายเป็นส่วนหนึ่งหรือทั้งหมดของคีย์หลักของเด็ก (รวมถึงการเป็นคีย์ต่างประเทศ) โดยทั่วไปทำให้คีย์ผสม ด้านเด็ก คีย์ที่มีอยู่ในที่สุดของตัวเด็กเองนั้นเป็นเพียงการหลอกหรือเป็นบางส่วนเท่านั้นซึ่งไม่เพียงพอที่จะระบุอินสแตนซ์ใด ๆ ของ Entity หรือ Entity Set ชนิดนั้นโดยไม่ต้องใช้ PK ของผู้ปกครอง

ความสัมพันธ์ที่ไม่ระบุตัวตนคือความสัมพันธ์ปกติ (บางส่วนหรือทั้งหมด) ของชุดเอนทิตี้อิสระที่สมบูรณ์ซึ่งอินสแตนซ์ไม่ได้ขึ้นอยู่กับคีย์หลักของกันและกันที่จะระบุเฉพาะแม้ว่าพวกเขาอาจต้องการคีย์ต่างประเทศสำหรับความสัมพันธ์บางส่วนหรือทั้งหมด เป็นคีย์หลักของเด็ก เด็กมีคีย์หลักของตัวเอง ID ผู้ปกครอง ทั้งอิสระ ทั้งนี้ขึ้นอยู่กับความสำคัญของความสัมพันธ์, PK ของหนึ่งไปเป็น FK ไปที่อื่น ๆ (ด้าน N) และถ้าบางส่วนสามารถเป็นโมฆะถ้ารวมจะต้องไม่เป็นโมฆะ แต่ในความสัมพันธ์เช่นนี้ FK จะไม่มีวันเป็น PK ของเด็กเช่นเดียวกับเมื่อความสัมพันธ์ที่ระบุเป็นกรณี

http://docwiki.embarcadero.com/ERStudioDA/XE7/en/Creating_and_Editing_Relationships


2

คุณลักษณะที่ย้ายจากผู้ปกครองไปยังเด็กช่วยระบุเด็ก1คนหรือไม่?

  • ถ้าใช่ : การพึ่งพาตัวตนที่มีอยู่ความสัมพันธ์คือการระบุและนิติบุคคลที่เป็นเด็ก "อ่อนแอ"
  • หากไม่มี : ไม่มีการพึ่งพาการระบุตัวตนความสัมพันธ์นั้นไม่สามารถระบุตัวตนได้และเอนทิตีลูก "เข้มแข็ง"

โปรดทราบว่าการระบุตัวตนหมายถึงการพึ่งพาอาศัย แต่ไม่ใช่วิธีอื่น ๆ FK ที่ไม่ใช่ค่า NULL ทั้งหมดหมายความว่าเด็กไม่สามารถอยู่ได้โดยไม่มีผู้ปกครอง แต่เพียงอย่างเดียวไม่ได้ระบุความสัมพันธ์

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ (และตัวอย่างบางส่วน) ให้ดูที่ส่วน "การระบุความสัมพันธ์" ของที่คู่มือวิธีการเออร์วิน

ป.ล. ฉันรู้ว่าฉัน (มาก) ไปงานปาร์ตี้ แต่ฉันรู้สึกว่าคำตอบอื่น ๆ นั้นไม่ถูกต้องทั้งหมด (กำหนดไว้ในแง่ของการพึ่งพาอาศัยอยู่แทนการพึ่งพาตัวตน) หรือคดเคี้ยว หวังว่าคำตอบนี้จะให้ความชัดเจนมากขึ้น ...


1 FK ของเด็กเป็นส่วนหนึ่งของคีย์หลักของเด็กหรือข้อ จำกัด UNIQUE (ไม่ใช่แบบ NULL)


1

ตัวอย่างที่ดีมาจากการประมวลผลคำสั่ง โดยทั่วไปคำสั่งซื้อจากลูกค้าจะมีหมายเลขคำสั่งซื้อที่ระบุคำสั่งซื้อข้อมูลบางอย่างที่เกิดขึ้นหนึ่งครั้งต่อการสั่งซื้อเช่นวันที่สั่งซื้อและรหัสลูกค้าและชุดรายการโฆษณา รายการโฆษณาแต่ละรายการมีหมายเลขรายการที่ระบุรายการโฆษณาภายในคำสั่งซื้อผลิตภัณฑ์ที่สั่งซื้อปริมาณของผลิตภัณฑ์นั้นราคาของผลิตภัณฑ์และจำนวนเงินสำหรับรายการโฆษณาซึ่งสามารถคำนวณได้โดยการคูณปริมาณด้วย ราคา.

หมายเลขที่ระบุรายการโฆษณาจะระบุเฉพาะในบริบทของคำสั่งซื้อเดียว รายการโฆษณาแรกในทุกคำสั่งซื้อคือหมายเลขรายการ "1" ข้อมูลเฉพาะตัวที่สมบูรณ์ของรายการโฆษณาคือหมายเลขรายการพร้อมกับหมายเลขคำสั่งซื้อที่เป็นส่วนหนึ่ง

ความสัมพันธ์ย่อยของผู้ปกครองระหว่างคำสั่งซื้อและรายการโฆษณาจึงเป็นความสัมพันธ์ที่ระบุ แนวคิดที่เกี่ยวข้องอย่างใกล้ชิดในการสร้างแบบจำลอง ER ไปด้วยชื่อ "subentity" โดยที่รายการโฆษณานั้นเป็นรายการย่อยของคำสั่งซื้อ โดยทั่วไปแล้ว subentity จะมีความสัมพันธ์ระหว่างการระบุตัวตนกับผู้ปกครองลูกกับหน่วยงานที่อยู่ภายใต้

ในการออกแบบฐานข้อมูลแบบคลาสสิกคีย์หลักของตาราง LineItems จะเป็น (OrderNumber, ItemNumber) นักออกแบบของวันนี้บางคนจะให้ ItemID แยกเป็นไอเท็มซึ่งทำหน้าที่เป็นคีย์หลักและถูกสร้างขึ้นใหม่โดย DBMS ฉันขอแนะนำการออกแบบคลาสสิกในกรณีนี้


0

สมมติว่าเรามีตารางเหล่านั้น:

user
--------
id
name


comments
------------
comment_id
user_id
text

ความสัมพันธ์ระหว่างทั้งสองตารางจะระบุความสัมพันธ์ เนื่องจากความคิดเห็นสามารถเป็นเจ้าของได้เท่านั้นไม่ใช่ผู้ใช้รายอื่น ตัวอย่างเช่น. ผู้ใช้แต่ละคนมีความคิดเห็นของตัวเองและเมื่อผู้ใช้ถูกลบความคิดเห็นของผู้ใช้นี้ก็ควรจะถูกลบ


0

การระบุความสัมพันธ์อยู่ระหว่างสองหน่วยงานที่แข็งแกร่ง ความสัมพันธ์ที่ไม่ได้ระบุอาจไม่ใช่ความสัมพันธ์ระหว่างเอนทิตีที่รัดกุมกับเอนทิตีที่อ่อนแอ อาจมีสถานการณ์ที่เด็ก ๆ มีคีย์หลักอยู่ แต่การมีอยู่ของเอนทิตีอาจขึ้นอยู่กับเอนทิตีหลัก

ตัวอย่างเช่น: ความสัมพันธ์ระหว่างผู้ขายและหนังสือที่ขายโดยผู้ขายอาจมีอยู่ที่ผู้ขายอาจมีคีย์หลักของตัวเอง แต่เอนทิตีของมันจะถูกสร้างขึ้นเฉพาะเมื่อขายหนังสือ

อ้างอิงจาก Bill Karwin


5
มันอาจช่วยในการกำหนดสิ่งที่คุณหมายถึงโดยนิติบุคคล "strong" และ "อ่อนแอ" ที่นี่
แน่นอน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.