我正在构建一个系统,它是用于存储来自许多其他系统的数据的中央存储库。当更新其他系统数据时,需要同步过程来更新中央存储库。将会有一个sync_action表来标识中央仓库需要同步的系统以及所需的同步类型。有一组定义好的行为是不太可能改变的。下面是一个瘦身系统。外键与检查约束的完整性
当我看到它,我可以以两种方式接近这一点:
选项1)有一个具有可用的3个行动的Action
表。有一个sync_action
表,它使用外键来引用所需的操作。
表:系统
ID Description
1 Slave System 1
2 Slave System 2
表:行动
ID Description
1 Insert
2 Update
3 Delete
表:Sync_action
ID Action System
1 1 1
2 2 1
选项2)而不是外键在sync_action.action
列上使用检查约束,因此只能插入操作Insert/Update/Delete
。
表:Sync_action
ID Action System
1 Insert 1
2 Update 1
我想知道进入确定完整性约束,外键VS检查约束之间进行选择时,这是一个更好的方法是什么因素。有类似的线程,但我没有发现它们足够明确。这可能是因为它的解释,但任何想法,将不胜感激。
干杯
我通常更喜欢FK和表格关系,因为:它们更“可见”(例如,显示在关系图中)并且它们“更具可扩展性”(取决于数据,而不是条件,并且可以具有附加的“额外”信息),并且它们通常是“更可映射的”(对于您选择的任何ORM)。在这样的情况下,我*也考虑使用非代理PK(它确实是一个“静态数据”表),也许只是一个“单一有意义的字符”,如“我”,“U”,“D”。如果在另一个表中,那么也可以具有“自我记录”标签列。 – 2012-02-19 08:35:15
欢迎使用StackOverflow:如果您发布代码,XML或数据样本,**请**在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码样本”按钮(“{}”)语法突出它! – 2012-02-19 10:29:56
我同意'pst' - 如果你需要添加第四个,第五个动作怎么办?如果你有一个单独的“Action”表,就像添加一行一样简单。如果你有检查限制,你需要放弃并重新创建这些 - 这是更多的工作,更麻烦。我没有看到任何好的论点,**针对具有单独的“操作”表并使用FK约束强制执行参照完整性 - 数据库擅长这一点! (这是他们的核心业务!) – 2012-02-19 10:31:24