Özellikle Cezanı ele almak başka bir düşünce önermek istiyorum: "Ben çünkü partiden tek bir satır tabloda varsa kontrol etmek istiyorum Yani hepsi biliyor ardından edildi takılı ."
"Gruplar" içine yerleştirerek işleri verimli hale getiriyorsunuz, ancak varlığını kontrol etmek her seferinde bir kayıt mı? Bu bana karşı sezgisel görünüyor. Yani " ekler her zaman toplu olarak yapılır " derken, bir insert deyimiyle birden çok kayıt eklediğiniz anlamına gelir . Postgres'in ASİT ile uyumlu olduğunu bilmeniz gerekir. Bir insert deyimiyle birden çok kayıt (bir grup veri) ekliyorsanız , bazılarının eklenip eklenmediğini kontrol etmeye gerek yoktur. İfade ya geçer ya da başarısız olur. Tüm kayıtlar eklenecek veya eklenmeyecek.
Öte yandan, C # kodunuz basitçe bir "set" ayrı ekleme deyimi yapıyorsa, örneğin, bir döngü içinde ve aklınızda, bu bir "toplu iş" .. o zaman aslında " ". "Parti" olarak adlandırdığınız şeyin bir kısmının eklenmeyeceğini beklediğiniz ve aslında bir kontrole ihtiyaç duyduğunuzu düşünmeniz, bu durumda daha temel bir sorununuz olduğunu güçlü bir şekilde göstermektedir. Tek bir eklemeyle birden çok kayıt eklemek için paradigmanızı değiştirmeniz ve tek tek kayıtların yapılıp yapılmadığını kontrol etmeye devam etmeniz gerekir.
Bu örneği düşünün:
CREATE TABLE temp_test (
id SERIAL PRIMARY KEY,
sometext TEXT,
userid INT,
somethingtomakeitfail INT unique
)
-- insert a batch of 3 rows
;;
INSERT INTO temp_test (sometext, userid, somethingtomakeitfail) VALUES
('foo', 1, 1),
('bar', 2, 2),
('baz', 3, 3)
;;
-- inspect the data of what we inserted
SELECT * FROM temp_test
;;
-- this entire statement will fail .. no need to check which one made it
INSERT INTO temp_test (sometext, userid, somethingtomakeitfail) VALUES
('foo', 2, 4),
('bar', 2, 5),
('baz', 3, 3) -- <<--(deliberately simulate a failure)
;;
-- check it ... everything is the same from the last successful insert ..
-- no need to check which records from the 2nd insert may have made it in
SELECT * FROM temp_test
Bu aslında herhangi bir ACID uyumlu DB için paradigma .. sadece Postgresql değil. Başka bir deyişle, "toplu" kavramınızı düzeltir ve ilk etapta herhangi bir satır kontrol yapmak zorunda kalmazsanız daha iyi olursunuz.