การสร้างเชิงพื้นที่“ หลายต่อหนึ่ง” เข้าร่วม


10

ฉันกำลังพยายามสร้างสิ่งที่ฉันเรียกว่าการเข้าร่วม "หลายต่อหนึ่ง" ฉันไม่รู้ว่านั่นจะเป็นคำที่ถูกต้องหรือไม่ ฉันมีตารางที่มีหมายเลขบัญชีที่ไม่ซ้ำกันสำหรับบ้านเคลื่อนที่ (เช่น - M1007970) ต่อหมายเลขบัญชีพัสดุภัณฑ์ (R0003285) (บ้านเคลื่อนที่หลายแห่งต่อพัสดุ - หลายต่อหนึ่ง) ฉันต้องเข้าร่วมตารางนี้กับเรขาคณิตพัสดุของเรา - และยังมีรูปหลายเหลี่ยมหนึ่งรูปต่อหนึ่งพัสดุเท่านั้น

ตัวอย่างเช่นตารางอาจมีสามแถวที่มีหมายเลขบัญชีบ้านมือถือ M1007370 ในแถวหนึ่ง M1007371 ที่อื่นและอีกแถวหนึ่งที่มี M1059370 แต่ทั้งหมดมีหมายเลขพัสดุ R0032585 เดียวกัน เรขาคณิตพัสดุของเราจะมีเขตข้อมูลเดียวกันของ R0032585 เท่านั้น

เมื่อเข้าร่วมฉันมีบันทึกบ้านเคลื่อนที่ 12,088 รายการและพัสดุ 44,103 ชิ้น ถ้าฉัน "เก็บบันทึกทั้งหมด" ฉันมี 44,103 บันทึกที่มีเพียงเลขที่บัญชีโทรศัพท์มือถือ 7,947 รายการ (จาก 12,088 ต้นฉบับ) ถ้าฉันเข้าร่วมโดยยึดตาม "เก็บเฉพาะระเบียนที่ตรงกัน" ฉันจะจบลงด้วยยอดรวมเพียง 7,947 บันทึก

ฉันทำมันสำเร็จในอดีตและสร้างแบบจำลอง ในรุ่นนี้ฉันใช้ตารางสำหรับบ้านเคลื่อนที่เพื่อเข้าร่วมในเลเยอร์พัสดุ (.lyr - วิธีเดียวที่คุณสามารถ / สามารถเข้าร่วมในรูปแบบ) ตามหมายเลขบัญชีพัสดุ ฉันคัดลอกฟีเจอร์ที่เก็บเฉพาะระเบียนที่ตรงกันไปยังฐานข้อมูลไฟล์ทางภูมิศาสตร์ จากฐานข้อมูลไฟล์ฉันก็ผนวกมันลงในระบบ SDE ของเรา ปัจจุบันนี้เลิกทำงานด้วยเหตุผลที่ฉันไม่สามารถเข้าใจได้เพราะไม่มีอะไรเปลี่ยนแปลง

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

คำตอบ:


9

บางครั้งมันก็สับสน แต่มันเป็นเรื่องของมุมมอง ดูแผนภาพนี้ (จากหัวข้อนี้ ) สำหรับการอ้างอิง:

แผนภาพความสัมพันธ์

นี่เป็นตัวอย่างของความสัมพันธ์ห้าประการ (และความสำคัญที่แตกต่างกันสามข้อ)

  1. One-to-many:พัสดุเกี่ยวข้องกับตาราง ParcelToOwner ในความสัมพันธ์แบบหนึ่งต่อหลายคน พัสดุหนึ่งใบอาจมีเจ้าของหลายคน (กรรมสิทธิ์บางส่วน)
  2. หลายต่อหนึ่ง:ตาราง ParcelToOwner เกี่ยวข้องกับ Parcels ในหลาย ๆ ความสัมพันธ์ เจ้าของหลายคนเป็นเจ้าของพัสดุ (อย่างน้อยร้อยละ)
  3. หลายต่อหนึ่ง:ตาราง ParcelToOwner เกี่ยวข้องกับเจ้าของในหลาย ๆ ความสัมพันธ์ พัสดุจำนวนมากอาจเป็นเจ้าของ (อย่างน้อยบางส่วน) โดยเจ้าของคนเดียว
  4. หนึ่งต่อหลายคน:เจ้าของเกี่ยวข้องกับตาราง ParcelToOwner ในความสัมพันธ์แบบหนึ่งต่อหลายคน เจ้าของคนหนึ่งอาจเป็นเจ้าของพัสดุจำนวนมาก (อีกครั้งอย่างน้อยบางส่วน)
  5. หลายต่อหลายคน:พัสดุเกี่ยวข้องกับเจ้าของในหลาย ๆ ความสัมพันธ์ พัสดุจำนวนมากอาจเป็นเจ้าของ (อย่างน้อยบางส่วน) เป็นเจ้าของและหลายคนอาจเป็นเจ้าของ (อย่างน้อยบางส่วน) เป็นจำนวนมาก สิ่งนี้แสดงผ่านตาราง ParcelToOwner และความสัมพันธ์ดังกล่าว DBMS ส่วนใหญ่ไม่สามารถแสดงความสัมพันธ์แบบหลายต่อหลายคนโดยไม่มีตารางตัวกลาง ( แหล่งที่มา ) ดังนั้นการออกแบบนี้

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

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

หากข้อมูลทั้งหมดของคุณอยู่ในฐานข้อมูลองค์กรคุณสามารถใช้Query Layerเพื่อทำสิ่งเดียวกันได้ทันที (ไม่มีคลาสคุณลักษณะกลาง)

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