Etiketleri yalnızca rastgele seçilmiş öğeler için nasıl gösterebilirim?


10

Başkalarının bu sorunu nasıl çözdüğünü merak ediyorum: Etiketli çok sayıda özelliğe sahip bir şey için bir harita oluşturdunuz. Müşteri / müşteri, görünüşte gelişigüzel görünen bazı kararlara (ör. Önemli özellikler olarak gördükleri) dayanarak yalnızca X, Y ve Z için etiketler göstermenizi ister. Bunu nasıl yapardın?

Bazı fikirler:

  • Bu özel etiket için yeni bir dize sütunu oluşturun ve yalnızca görmek istedikleri özellikler için bir değer girin (yinelenen bilgilerle sonuçlanabilir)
  • Yeni bir boole sütunu oluşturun ve görmek istedikleri özellikleri true ile işaretleyin, ardından etiketi yalnızca boole doğru olduğunda görüntülemek için QGIS 1.8'deki koşullu etiketlemeyi kullanın

6
İkinci fikrin birçok avantajı vardır: (i) neyin etiketlenmesi gerektiğini açıkça belgeler, (ii) temel alınan veri kümesi kadar kalıcı ve taşınabilirdir, (iii) hangi etiketlerin görüneceğini belirlemek için basit ve doğrudan bir mekanizma sağlar ( hatta başka bir CBS veya çizim paketine taşınabilir), (iv) bu etiket seçimleri ve diğer değişkenler arasındaki ilişkiler hakkında herhangi bir soru olması durumunda analize bile uygundur ve (v) müşterinin seçimini aynı anda kodlayarak , yinelenen bilgi oluşturmaz.
whuber

2
@whuber cevap verebilir misin, oy verebilirim çünkü tam da bunu yapardım.
Nathan W

Yanıtlar:


11

İkinci fikrin (seçim için bir boolean niteliği oluşturmak için) birçok avantajı vardır :

(i) neyin etiketlenmesi gerektiğini açıkça belgeliyorsa,

(ii) temel alınan veri kümesi kadar kalıcı ve taşınabilir olması,

(iii) hangi etiketlerin görüneceğini belirlemek için basit ve doğrudan bir mekanizma sağlar (hatta başka bir CBS veya çizim paketine taşınabilir),

(iv) bu etiket seçimleri ile diğer değişkenler arasındaki ilişkiler hakkında herhangi bir soru olması durumunda analize bile uygundur ve

(v) müşterinin seçimini eşzamanlı olarak kodlayarak, yinelenen bilgi oluşturmaz.

Burada akıllıca önerildiği gibi , bazı genel veri tabanı yapım ve yönetim ilkeleri vardır . Bunlardan biri, tutarlı bir bilgi parçasının mümkünse veritabanında benzersiz bir şekilde temsil edilmesi gerektiğidir . (Elbette birleştirmeleri ve ilişkilendirmeleri uygulamak için anahtar olarak kullanılan bilgiler, farklı tablolarda karşılık gelen kayıtları tanımlama işlevi nedeniyle birden fazla yerde görünmelidir.) Bu ilkenin, normalleştirilmemiş bir koruma sağlamaya çalışan herkes için mükemmel nedenleri vardır. ilişkisel veritabanı şunları kanıtlayabilir: Bu bilgileri her zaman güncellemeyi, kaldırmayı veya eklemeyi hatırlamıyorsanız göründüğü tablo, veritabanınız yakında dahili olarak tutarsız hale gelir: bozuk, genellikle geri döndürülemez şekilde.

Diğer bir ilke, iyi bir ilişkisel veritabanı tasarımında, her tablonun tek bir kavramsal "varlığı" temsil etmesi gerektiğidir : verinin modellediği bir şey veya bu şeyler arasında bir ilişki. İstemci, görünüşte keyfi bir özellik seçimi belirlediğinde, bir tablodaki satırların alt kümesini etkili bir şekilde belirtir. Matematiksel olarak, ayrılık aksiyomu ile bu, onları bir boole alanıyla işaretlemekle aynıdır. Bu nedenle, bir veritabanındaki şeylerin anlamlı herhangi bir "keyfi" alt kümesi, bir boole alanı ile temsil edilebilir ve tersine, böyle bir alan, keyfi alt kümeleri (veya seçimleri) depolamanın iyi bir yoludur.

Yine bir başka ilke, bilgi depolamak için CBS'nin temel veri yönetimi yeteneklerini kullanmayı tercih etmenizdir . Alternatif bazı geçiciyöntemi, CBS'nin "proje dosyaları" içinde veya başka bir bağımsız yolla bilgi depolayabilme yeteneğine dayanmaktadır. Bunun tipik bir örneği, istenen etiketleri manuel olarak seçme ve yerleştirme pratiğidir. Genellikle bunu yapmak hızlı ve kolaydır. Sorunlar, bir değişikliğe ihtiyaç duyulduğunda veya işin yeniden üretilmesi gerektiğinde ortaya çıkar; bu durumlardan biri ya da diğeri pratikte kaçınılmazdır. Etiketlerin manuel olarak yerleştirilmesi, RDBMS dışında son derece eliptik bir şekilde bilgi depolamakla (yani, hangi özellik alt kümesinin etiketlenmesi gerektiği) eşdeğerdir. Yani, seçim yalnızca hangi etiketlerin görüneceği ve hangilerinin görünmeyeceği ile belirtilir. Daha sonra bu takip sorunlarını nasıl çözeceğinizi düşünün:

  • Müşteri, aynı etiketlerin farklı bir projenin parçası olan ilgili ancak farklı bir haritada görünmesini istiyor.

  • Etiketlerin başka bir özellikle ilişkilendirilip ilişkilendirilmediği sorusu ortaya çıkar.

  • Zaman içinde etiketlerde birkaç değişiklik yaptıktan sonra, orijinal sürüme geri dönmeniz istenir.

Bu durumlarda, sorunu çözmek için yapılan çalışmalar çok büyük olabilir: etiketlemeyi tekrar tekrar yapmanız veya veritabanı tablolarına karşı manuel çapraz kontroller yapmanız veya eski bir arşivlenmiş proje dosyasını bulup geri yüklemeniz gerekir. Etiketler bunun yerine veritabanındaki bir boole alanı ile temsil edildiyse, çalışma neredeyse önemsiz olurdu.


1
Ben sadece CBS ile başlıyorum ama yazılım geliştirme yapmaktan bazı veritabanı bilgim var. Yakında, orijinal veri kümesiyle 1'e 1'e katılan ve belki de saydamlık için PostgreSQL Görünümü olarak sağlanan ayrı, istemciye özgü bir tablo oluşturarak orijinal veri kümesini koruma hakkında bir soru soracağım.
Brian Kelly

Evet, bu da iyi bir çözüm. Veritabanı bilginizle nadiren mükemmel bir cevap olduğunu bilirsiniz; her zaman ödünç verilir. Bir arama tablosu zarif ve bazı durumlar için mükemmeldir. Aslında, genellikle etiketlenecek özelliklerin kimliklerini listeleyen yeni bir tabloya ihtiyacınız vardır: layer özellik tablosuna katılmak, özelliklerin etiketlenmemesi için boş olan yeni (yabancı) bir alan oluşturur ve siz gitmek güzel. Ama şimdi veritabanında yönetilecek yeni bir tablonuz var: ödünleşim var.
whuber

8

Kuralı muhtemelen yeni ifade tabanlı etiketlemede ayarlayabilirsiniz. Kural, ortaya çıkan etiketleri almak için ne yaptığınızın belgeleri olarak çalışır.

"Boole bayrağı" yaklaşımına göre avantajı, doğru kural üzerinde çalışırken bunun daha esnek olmasıdır. Temeldeki veri kümesini değiştirmeden kuralı değiştirmek ve geliştirmek kolaydır. Öte yandan, diğer CBS paketleri için taşınabilir değildir.

Bu, yalnızca adları altı karakterden uzun ve belirli bir sınıfla etiketlediğim bir örnektir:

resim açıklamasını buraya girin


1
Ancak bu durumda kural "Bu özellikleri önemli, diğerleri önemli değil" şeklinde düşünüyor. Bunun için bir fonksiyon olduğunu sanmıyorum :-)
Brian Kelly

1
Ayrıca, bu soru "Veri kümesini ne zaman değiştirmeliyim ve ne zaman kopyalamalıyım?" Ancak bunun çok daha büyük bir konuşma olduğundan şüpheleniyorum.
Brian Kelly

Sadece bu önemli özelliklerin en azından clazz özelliğini kullandığım gibi kullanabileceğiniz bir kimliğe sahip olacağını varsaydım. Her iki çözümün de artıları var.
underdark
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.