【发布时间】:2013-11-15 19:33:36
【问题描述】:
我用下图创建了一个数据库:
http://imagizer.imageshack.us/v2/800x489q90/440/o1yu.png
TrainerPokemon 表表示出现的口袋妖怪(属于训练师),而 Pokemon 表表示口袋妖怪“物种”。一种特定的口袋妖怪可能拥有某些能力,但这只口袋妖怪的出现可能只具有一种能力(TrainerPokemon 表中的AbilityID 列)。
这是我的问题:我试图创建一个触发器以防止将任何其他功能(不同于PokemonAbility 表中指定的功能)插入/更新到TrainerPokemon 表中的寄存器,但是我没有成功。
有人对触发器有任何想法吗?这个数据库模型的新想法也很受欢迎。
(重要提示:我使用的是 SQL Server 2012)
【问题讨论】:
-
你不应该在这里使用触发器,你应该修复你的架构。
TrainerPokemon表上的AbilityId列实际上应该是PokemonAbility表的ID,它应该引用该列。 (这就留下了一个问题,即你可能会以与那里的口袋妖怪不同的能力结束,但这就是你为图表建模的方式) -
那么我应该使用什么来维护数据完整性?
-
对于你在这里解释的特殊情况,添加我刚才说的参考。遗憾的是,我没有时间查看您的整个架构,了解您真正想要的是什么,然后创建一个新图表
-
PeeeeeeeeeekaCHUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU!
-
要实现你所需要的,你真的应该合并表
TrainerPokemon和PokemonAbility
标签: sql sql-server triggers