2012-12-22 22 views
7

Bir işlem için bir işlem, bir borçlandırma ve diğer kredilendirme için iki kayıt kaydediyorum.Karşılıklı özel tablo sütunları oluşturma

Bu nedenle creditAmount(Money) ve debitAmount(Money) tablosunda iki sütun var.

Sütunlardan birinin her satırda boş olmadığından tablo düzeyi kısıtlaması istiyorum. i.e. Sıra # 3 creditAmount numaralı satırın boş olması durumunda debitAmount bir değer ve Vice Versa içermelidir.

Bir satırda kayıt eklerken de aynı durum nasıl sağlanır?

+4

Neden bir sütun ve "C" veya "D" harfleri belirtmiyorsunuz? –

+1

Sadece merak, ama neden kredi veya borç belirtmek yeterli tek bir değer işareti değil mi? – HABO

+0

Bu gereklilik, bunu değiştiremiyorum. – MaxRecursion

cevap

13

Tabloya bir CHECK constraint ekleyebilirsiniz:

ALTER TABLE Transactions ADD CONSTRAINT CK_Transactions_DebitOrCreditExists 
CHECK ((creditAmount IS NULL AND debitAmount IS NOT NULL) 
    OR (creditAmount IS NOT NULL AND debitAmount IS NULL)) 
+0

Güncellendi. Teşekkürler Martin! –

0

Eğer ön uç (Başvurunuz) üzerinden taşıma, o zaman Kredi ve ATM olma boş hem meselesinin ortaya çıkmayacak. Borç veya Kredi'de en az bir giriş eklenir.

Birisi arka uçta çalışırken ve doğrudan bir tabloya değer eklerken bir kısıtlama koymak istediğinizi tahmin ediyorum. Bu durumda, Chris bir çözüm önerdi.

Ancak, arka uçtan ekleme yapıyor olsanız bile, ne Borç ne de Kredi olduğunda bir işlemi neden kaydedeceğimi takip etmiyorum.

+0

Aslında bir hizmet ve bir hizmet olarak ben tamamen bana gönderilen verilere güvenemiyorum. Yani, sadece önlem için. – MaxRecursion

+0

Verilerinizi her düzeyde doğrulamak iyi. Bakınız: Birisinin db'ye veriyi manuel olarak girmesi ve herhangi bir ön uç veya gerçekten iş katmanı doğrulama mantığını atlaması durumudur. – 5arx

İlgili konular