จะแสดงเฉพาะป้ายกำกับสำหรับการเลือกรายการโดยอำเภอใจได้อย่างไร


10

ฉันอยากรู้ว่าคนอื่นจะแก้ไขปัญหานี้อย่างไร: คุณได้สร้างแผนที่สำหรับบางสิ่งที่มีคุณสมบัติจำนวนมากที่มีป้ายกำกับ ลูกค้า / ลูกค้าขอให้คุณแสดงเฉพาะป้ายกำกับสำหรับ X, Y และ Z ตามการตัดสินใจโดยพลการบางอย่าง (เช่นสิ่งที่พวกเขาเห็นว่าเป็นคุณสมบัติที่สำคัญ) คุณจะทำสิ่งนี้อย่างไร

ความคิดบางอย่าง:

  • สร้างคอลัมน์สตริงใหม่สำหรับป้ายกำกับพิเศษนี้และป้อนเฉพาะค่าสำหรับคุณลักษณะที่ต้องการดู (อาจทำให้ข้อมูลซ้ำซ้อน)
  • สร้างคอลัมน์บูลีนใหม่และตั้งค่าสถานะคุณลักษณะที่พวกเขาต้องการดูด้วยความจริงจากนั้นใช้การติดฉลากตามเงื่อนไขใน QGIS 1.8 เพื่อแสดงเฉพาะป้ายกำกับเมื่อบูลีนเป็นจริง

6
ความคิดที่สองมีข้อดีหลายประการ: (i) มันชัดเจนเอกสารสิ่งที่ต้องมีการติดฉลาก (ii) มันเป็นแบบถาวรและพกพาเป็นชุดข้อมูลพื้นฐาน (iii) มันมีกลไกที่ง่ายและตรงไปตรงมาเพื่อกำหนดฉลากที่จะปรากฏ ซึ่งสามารถพกพาไปยัง GIS อื่นหรือแพคเกจการวางแผน) (iv) สามารถตอบสนองการวิเคราะห์ในกรณีที่มีคำถามเกี่ยวกับความสัมพันธ์ระหว่างตัวเลือกฉลากและตัวแปรอื่น ๆ และ (v) โดยการเข้ารหัสทางเลือกของลูกค้า มันจะสร้างข้อมูลที่ไม่ซ้ำกัน
whuber

2
@ คุณสามารถตอบคำถามนี้ได้เพื่อให้ฉันสามารถลงคะแนนได้เพราะนั่นเป็นวิธีที่ฉันจะทำ
Nathan W

คำตอบ:


11

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

(i) เอกสารชัดเจนว่าต้องระบุอะไร

(ii) เป็นชุดข้อมูลถาวรและเคลื่อนย้ายได้เช่นเดียวกับชุดข้อมูลพื้นฐาน

(iii) เป็นกลไกที่เรียบง่ายและตรงไปตรงมาเพื่อกำหนดว่าฉลากใดจะปรากฏขึ้น

(iv) การวิเคราะห์แม้ในกรณีที่มีคำถามเกี่ยวกับความสัมพันธ์ระหว่างตัวเลือกฉลากและตัวแปรอื่น ๆ และ

(v) ด้วยการเข้ารหัสทางเลือกของลูกค้าอย่างไม่ใส่ใจมันไม่สร้างข้อมูลที่ซ้ำกัน

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

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

แต่หลักการก็คือว่าคุณควรจะชอบใช้ความสามารถในการจัดการข้อมูลพื้นฐานของระบบสารสนเทศภูมิศาสตร์ในการจัดเก็บข้อมูล ทางเลือกคือกิจเฉพาะกิจวิธีขึ้นอยู่กับความสามารถของ GIS ในการจัดเก็บข้อมูลภายใน "ไฟล์โครงการ" หรือในรูปแบบอิสระอื่น ๆ ตัวอย่างทั่วไปของสิ่งนี้คือแนวปฏิบัติในการเลือกและวางป้ายกำกับที่ต้องการด้วยตนเอง บ่อยครั้งที่การทำเช่นนี้รวดเร็วและง่ายดาย ปัญหาเกิดขึ้นทุกครั้งที่มีการเปลี่ยนแปลงหรือต้องการงานที่จะทำซ้ำ อย่างใดอย่างหนึ่งของสถานการณ์เหล่านี้จะหลีกเลี่ยงไม่ได้จริง การจัดวางฉลากด้วยตนเองนั้นมีความสำคัญอย่างยิ่งต่อการจัดเก็บข้อมูล (กล่าวคือสิ่งที่ควรระบุไว้ในส่วนย่อยของคุณลักษณะ) นอก RDBMS ในรูปวงรีอย่างยิ่ง กล่าวคือการเลือกที่ระบุ แต่เพียงผู้เดียวโดยที่ป้ายชื่อปรากฏขึ้นและตัวเลือกใดไม่มี คิดว่าคุณจะแก้ปัญหาที่ตามมาได้อย่างไร:

  • ลูกค้าต้องการให้ป้ายกำกับเดียวกันปรากฏในแผนที่ที่เกี่ยวข้อง แต่แตกต่างกันซึ่งเป็นส่วนหนึ่งของโครงการอื่น

  • มีคำถามเกิดขึ้นว่าป้ายกำกับนั้นเชื่อมโยงกับคุณลักษณะอื่น ๆ หรือไม่

  • หลังจากทำการเปลี่ยนแปลงฉลากหลายครั้งเมื่อเวลาผ่านไประบบจะขอให้คุณเปลี่ยนกลับเป็นเวอร์ชันดั้งเดิม

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


1
ฉันแค่เพิ่งเริ่มใช้ GIS แต่มีความรู้ด้านฐานข้อมูลจากการพัฒนาซอฟต์แวร์ ฉันสงสัยว่าอีกไม่นานฉันจะมีคำถามติดตามเกี่ยวกับการเก็บรักษาชุดข้อมูลดั้งเดิมโดยสร้างตารางแยกเฉพาะไคลเอ็นต์ที่เชื่อมต่อ 1 ถึง 1 กับชุดข้อมูลดั้งเดิมและอาจให้เป็น PostgreSQL View เพื่อความโปร่งใส
Brian Kelly

ใช่นั่นเป็นทางออกที่ดีเช่นกัน ด้วยความรู้ฐานข้อมูลของคุณทำให้คุณรู้ว่าไม่มีคำตอบที่สมบูรณ์แบบ มีการแลกเปลี่ยนกันอยู่เสมอ ตารางการค้นหาหรูหราและสมบูรณ์แบบสำหรับบางสถานการณ์ ในความเป็นจริงแล้วบ่อยครั้งที่คุณต้องมีตารางใหม่ที่แสดงรหัสของคุณลักษณะที่จะมีป้ายกำกับ: การเข้าร่วมกับตารางแอตทริบิวต์ของเลเยอร์จะสร้างเขตข้อมูลใหม่ (ต่างประเทศ) ที่เป็นโมฆะสำหรับคุณสมบัติที่จะไม่ติดป้ายกำกับ ดีที่จะไป แต่ตอนนี้คุณมีตารางใหม่ที่จะจัดการในฐานข้อมูล: มีการแลกเปลี่ยน
whuber

8

คุณสามารถตั้งกฎในการทำป้ายตามนิพจน์ใหม่ได้ กฎจะทำงานเป็นเอกสารประกอบสิ่งที่คุณทำเพื่อให้ได้ป้ายกำกับที่ได้

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

นี่คือตัวอย่างที่ฉันเพียงแค่ติดป้ายกำกับคุณลักษณะที่มีชื่อที่มีความยาวมากกว่าหกตัวอักษรและมีคลาสที่แน่นอน:

ป้อนคำอธิบายรูปภาพที่นี่


1
แต่กฎในกรณีนี้คือ "ฉันพิจารณาคุณลักษณะเหล่านี้สำคัญและอื่น ๆ ไม่สำคัญ" ฉันไม่คิดว่าจะมีฟังก์ชั่นสำหรับ :-)
Brian Kelly

1
คำถามนี้เชื่อมโยงกับ "ฉันควรเปลี่ยนชุดข้อมูลเมื่อใดและควรคัดลอกข้อมูลเมื่อใด" ฉันคิดว่ามันเป็นการสนทนาที่ใหญ่กว่ามาก
Brian Kelly

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