Pokud máte index na tblAreas.AreaID, pak jakákoli transakce, která obsahuje WHERE tblAreas.AreaID in (...)
zamkne rejstřík pro tyto položky. Nezáleží na tom, zda řádky samotné existují nebo ne. Tento zámek zabrání další transakci ve vložení jakýchkoli položek pro tato ID. Takže si myslím, že ani jeden z vašich návrhů nemusíte dělat. Pouhým dotazem, zda jsou pro vaše území dostupné všechny oblasti, získáte zámky, které potřebujete k atomickému vložení vašeho území.
To může být trochu problém, protože vaše ID oblastí nejsou jedinečné pro celou hru, takže mezi oblastmi se stejným ID na různých mapách může docházet k nesprávné serializaci. Mohlo by pomoci přidat mapID do vaší tabulky tblAreas, abyste mohli vytvořit index (mapID, areaID), který by místo toho vyhledával, což by předešlo falešným kolizím v indexu. (To by denormalizovalo vaše schéma, což možná nebudete chtít dělat z jiných důvodů.)