2009-03-05 18 views
3

Kullanıcı ayarlarını içeren bir uygulama için bir veritabanı tasarladım. Bu veritabanı birkaç sistem kullanıcı ayarı ile önceden yüklenecektir. Bunlar sürümden sürüme değişebilir. Bu ayarları güncellemeyle nasıl ilgilenmeliyim? Ben ile geldi'Sistem verileri' bir veritabanında mı olmalı?

çözümleri:

  1. ayar tablolarına bir boolean 'sistem' alanını uygulayın ve tüm sistem ayarlarını değiştirdiğinizde veritabanı değişiklikleri sürüm numarası. (Bu ayarları geliştirirken veritabanını sürekli olarak silmek zorunda olduğunuzda çok can sıkıcıdır)
  2. Sistem ayarlarını veritabanına koymayın ve sistem verilerini, bunları sorgularken veritabanından veriyle birleştirin.

Şu anda birinciyi yapıyorum, ancak bir şekilde 2'nci daha uygun görünüyor. Microsoft Entity Framework'ü kullanırken dış veriyi bir veritabanındaki verilerle nasıl sorunsuz bir şekilde iliştirmeli ve nasıl iliştirebilirim?

+0

'Sistem kullanıcı ayarı' nedir? Varsayılan kullanıcı ayarı mı demek istiyorsun? –

+0

Oyunların bir koleksiyonunu yazıyorum. Bu oyunlar gemisi, her oyun için birkaç varsayılan sistem ayarıyla gönderilecektir. Bir kullanıcı kendi ayarlarını yapabilir ve bunları kullanabilir. – Wouter

cevap

1

Çok sayıda işlem olduğundan, basit bir kaynağın ötesindeki verilerde gerçekleştirmek isteyen sonuçlara varabilir (sistem ayarlarıyla kimlerin eşleştiğini görmek için iç ve dış birleşimler görür ya da akla yaymaz). Sistem verileri kullanıcı verileriyle aynı yapıdadır.

Ayrıca, kullanıcının belirli bir değeri olmadığında sistem verilerinden varsayılan değerleri doldurma gibi davranışlara da izin verir. this blog post numaralı telefondan ayarları ve geçersiz kılma işlemlerini yönetme konusunda bazı ilginç noktalar vardır.

0

Önce kullanıcı için varsayılan değeri yükler, sonra kullanıcı tarafından özelleştirilmiş değerleri üst kısmına yüklerim. Bu şekilde varsayılanları değiştirebilirdiniz, ancak kullanıcı belirli bir ayarı değiştirdiyse, onu kaybetmezler.

0

1) ile neyi başarmak istediğinizden emin değilim, ama 2'ye cevap verebilirim.

Oluşturulan tüm varlık sınıfları kısmi sınıflardır, böylece bunları kendi özellikleriniz ve yöntemlerinizle genişletebilirsiniz. Bu nedenle, verilerini harici bir kaynaktan alan bir öğeye fazladan bir özellik ekleyebilirsiniz (örneğin bir yapılandırma dosyası).

Şimdi, bu en iyi çözüm olmayabilir çünkü ihtiyaç duyduğunuz tüm bilgileri bir seferde almanın bir yolu yoktur (örneğin çok sayıda varlık alınırken).

0

Bunun gerçekten sorunuza ulaşıp ulaşmadığından emin değilim, ama bunun çok küçük bir veritabanı alıştırması olduğunu düşündüm. Eğer 1 numaralı önerecek gibi "ayarı" olarak adlandırılan bir tablo olduğunu varsayalım:

+------------+--------------+-----------+---------------+ 
| setting_id | setting_name | is_system | setting_value | 
+------------+--------------+-----------+---------------+ 
|   3 | foo   |   1 | Blue   | 
|   4 | foo   |   0 | Red   | 
|   5 | bar   |   1 | Green   | 
|   6 | baz   |   1 | Yellow  | 
|   7 | baz   |   0 | Orange  | 
|   8 | quux   |   0 | Purple  | 
+------------+--------------+-----------+---------------+ 

birincil anahtar setting_id olacağını ve benzersiz kısıtlama sütunlar setting_name ve is_system uygulanır (Boolean olan).

aşağıdaki sorgu işini yapacak, şu anda (geçersiz kılma sistem ayarları varsayarak kullanıcı ayarları) aktif olan tüm ayarları bulmak için:

+--------------+---------------+ 
| setting_name | setting_value | 
+--------------+---------------+ 
| foo   | Red   | 
| bar   | Green   | 
| baz   | Orange  | 
| quux   | Purple  | 
+--------------+---------------+ 
: sorguyu çalıştırma

SELECT setting_name, setting_value 
FROM setting s 
WHERE is_system = (
       SELECT MIN(is_system) 
       FROM setting si 
       WHERE s.setting_name = si.setting_name 
     ); 

bu sonucu üretir

Dolayısıyla, bir kullanıcı ayarı varsa, getirilir, aksi halde sistem varsayılanı kullanılır.

Bu şekilde MIN() işlevini kullanmak, Boolean değerleri üzerinde çalışmak için bir saptır, ancak bu yeterince basittir.

İlgili konular