2012-11-21 17 views
6

Bir döviz kurlarının değerleri depolamak için gereken bir Döviz Kurları Çapraz Tablo depolamak tablo (örneğin http://www.exchangerates.org.uk/currency/currency-exchange-rates-table.html). Tasarım ve benim durumumda bir RDBMS, MySql kullanarak çapraz

kullanıcı

günlük rakamlar güncellemek için gidiyor ve sistem farklı sürümlerini saklar.

Sana tabloları tasarlamak istiyorum ya da modeller isterseniz merak ediyorum.

basit yolu için, gelen bir tablo kullanılarak, elbette, ve sütunları

from: char(3) 
to: char(3) 
value: decimal(6,4) 
inverse_value: decimal(6,4) 

değerleri ama diğer (daha iyi) çözümler olup olmadığını bilmek isteriz.

Çok teşekkürler.

DÜZENLEME

belli değildi, özür dilerim ama ben performansları ve ölçeklenebilirlik özellikle ilgileniyorum.

değeri/inverse_value yapısı ve verilen 90 para tutmak, Döviz Çapraz Tablo günde 4050 kayıtları gerekir.

Her gün yeni bir sürüm oluşturulduysa, bir yıl içinde 1,478,250 kayıt olur ve sorguları acı çekmeye başlayabilir.

Masayı uyguladık ve çapraz tablo oluşturma, sadece iyi çalışıyor oldukça hızlıdır ve onunla mutluyum.

Sadece bunu uygulamak için daha iyi bir yol olup olmadığını merak ediyordum. (Sadece günlük bu değerleri güncelliyoruz eğer yerine datetime alan) iyi bir başlangıç ​​gibi görünüyor

+2

Eh, gelen ve alanlara hakkında biraz dikkatli olurdum. Herhangi bir ekranda kullanılacaksa char (3) 'e bağlı başka bir kimlik isteyebilirsiniz (ekranınız değiştiğinde indeksinizi bozmak istemezsiniz). Bunun ötesinde ... değer ve inverse_value ne için? Şahsen sadece kullanıp, değerlendiririm. – RonaldBarzell

+0

evet, şema basitleştirilmiş bir versiyondu, benim durumumda, tamsayı kimlikleri olan para birimleri için ekstra bir tablo var. Ayrıca, inverse_value gereklidir, çünkü şekiller farklı olabilir. –

+0

Cevaplardan birine bir puan verme şansı var mı? – Ewen

cevap

3

, ben de bir tarih alanı eklemek istiyorum. Böyle Böylece belki bir şey:

currency_code_from: char(3) 
currency_code_to: char(3) 
conversion_value: decimal(6,4) 
inverse_conversion_value: decimal(6,4) 
effective_date: date() 

Ben bu endeks gereksinimlerini dikte edecek, ama muhtemelen currency_code_from genelinde bir bileşik birincil anahtar kullandığınız gibi masayı sorgulamak planlıyoruz çeşitli yollar, ne olduğundan emin değilim , currency_code_to ve effective_date alanları, ardından belirli sorgularınız için gereken tüm dizinleri ekleyin.

currency_code: char(3) 
currency_name: varchar(50) 
currency_symbol: char(3) 
currency_image: varchar(100) 

ekran için gerekirse Ardından söz konusu ilişki için ek bir tablo olmasını isteyebilirsiniz

para birimi ve döviz sembolün adını saklar (bunu kullanmak istiyorsanız da belki ülke bayrağı resme bağlantı)

Bu tablodaki birincil anahtar, currency_code olur.

2

Marco, Muhtemelen bir tarih alanına ya da bir boole isCurrent'a ihtiyacınız olacaktır, böylece en son ccy dönüşümünü seçebilirsiniz.

Rakam alıp satmak ister misiniz? Normalde, kurumun kaybetmediğinden emin olmak için ccy satın alma ve satma arasında biraz yol olduğundan emin olursunuz. Bu, bazıları tarafından mantıklı bir iş yaklaşımı ve diğerleri tarafından oyulması olarak adlandırılır.

Bu rakamlar manuel olarak girilirse, para birimi için önceki şekle baktığınızdan emin olun ve eğer>% 3'lük bir tutarsızlık varsa kullanıcıyı uyarın. Diğer tek sorun, döviz kurlarının gün içinde büyük ölçüde dalgalanmasıdır. Savaş ilanından önce sadece bir dönüşümle takılmak mı istiyorsun?

Doğru yolda olduğunuzu gösterir.

+0

Evet, bunlar alım satım rakamlarıdır. Müşterinin şeyleri basitleştirmek için değerleri manuel olarak gireceğini söyledim. Gerçekte, bir dahili araç tarafından otomatik olarak oluşturulan bir excel'i yükleyecektir. –

2

Şahsen "doğal" anahtarları kullanmazdım.

country 
------- 
country_id : integer not null auto_increment 
name : varchar(255) 
abbrev : varchar(255) 
motto : varchar(255) 
. . . 

ardından çapraz tabloda olanlar için kimlikleri kullanın:

currency_exchange 
----------------- 
currency_exchange_id : integer not null auto_increment 
from_country_id : integer 
to_country_id : integer 
value : decimal(10,4) 
inverse_value : decimal(10,4) 

Bu beni sembole ülkenin adını değiştirmenizi sağlar Bunun yerine, ülkelerin/para-sahip-kuruluşlar bir tablo var , tam adı, ne olursa olsun, çapraz tablo tanımını değiştirmek zorunda kalmadan. Dönüşüm değerleri için sorgularken iki tabloya katılın.

Ayrıca, ondalık (10,4) ile gittim ve mümkün olan en yüksek boyuta bakmanızı öneririz. Boyutu kısıtlamak ve daha sonra çok küçük bir boyut seçtiğini keşfetmek için programlama güncelleme baş ağrısına değmez. Bu hatalarla uğraşmaya değecek kadar yer kaplamıyor. Ad için kullandığınız varchar için de aynı. Varcharlar verimli bir şekilde saklanır.

Ayrıca, value her zaman 1,00 olacak mı? (Yani, her zaman 1'den başka bir para biriminde tersine çevirmiyor musunuz?) Eğer öyleyse, value sütununu tablodan bırakabilirsiniz.

Şahsen tüm tablolarda kimlik değerleri oluşturmayı seviyorum, bu yüzden çapraz tabloya koydum, ancak bazı insanlar gereksiz olduğunu düşündürebilir. Sık sık daha sonra, onu dışarı çıkarmayı seçtiğimde, keşke onu eklemeyi dilediğimi buluyorum.

Ben para adı için başka bir tablo olan görebiliyordu:

currency 
-------- 
currency_id : integer not null auto_increment 
country_id : integer 
name : varchar(255) 
symbol : varchar(255) 
+0

Katılıyorum, doğal anahtarları tercih etmiyorum, benimki sadece basitleştirilmiş bir versiyondu. Performansları ve ölçeklenebilirliği ile ilgileniyordum, yazıyı daha açık olmaya çalışacağım. Ayrıca, değer her zaman! = 1 iken inverse_value, teoride 1/değer olmalıdır, satın alma/satma doğası nedeniyle farklı olabilir. Son olarak, ipucu için ondalık, teşekkürler, kesinlikle iyi bir nokta! –

+0

Re: performans, vb. Bir kez benzer bir çapraz bağım vardı (oyun muhalifleri arasındaki öldürme sayısı) ve bu tam olarak neyle geldiğini gösteriyor. İyi çalışıyor. – Marvo

İlgili konular