在数据库模型图中保持参照完整性

应用对象
Visio 高级版 2010 Visio 2010 Visio 2007

注意

数据库模型图仅可在某些版本的 Visio 中可用。 若要了解详细信息,请参阅找不到数据库建模功能?

了解引用完整性规则

引用完整性规则可防止数据库用户意外中断相关列之间的映射。

假设你有一个名为 Books 的数据库,其中包含两个名为 Titles 和 Authors 的表。 就此示例而言,每个游戏只有一个作者,但每个作者可以有多个作品,从而创建所谓的一对多关系。 关系“一”端的表称为 父表。 “多”端的表称为 子表

为了收集有关每本书及其作者的信息,查询使用键将 Titles 表中的每本书与 Author 表中的作者进行匹配。 父表 (作者) 必须具有唯一标识每行 的主键 。 “标题”表必须有一个列,用于保存每个游戏的 AuthorID。 此列称为 外键。 主键标识每个作者,外键标识哪些书籍是由哪个作者编写的。

如果用户在父表中更改作者的 AuthorID,而不更新 Titles 表中的 AuthorID,则 Titles 表中的书籍不再具有有效的作者。

可以设置引用完整性规则以执行所需的操作,而无需在这两个表中更改 AuthorID。 在父表中更改或删除密钥时,可以选择让数据库模型执行特定操作。

注意

术语父级和子级用于表示类别中完全不同的内容,这些类别是使用 父级到类别类别类别到子 形状创建的。 有关类别的详细信息,请参阅 在数据库模型关系图中定义类别

设置引用完整性的操作

  1. 双击要为其设置引用操作的关系。

  2. 在“数据库属性窗口的”类别“下,单击”引用操作”。

  3. 单击希望数据库对子表中的相应值执行的操作。 可以从以下操作中进行选择:

    • 无操作 当更改或删除父表的主键中的值时,子表的外键中的相应值保持不变。
    • 级 联 更改或删除父表主键中的值时,将更改或删除子表外键中的相应值,以匹配主键。
    • 设置 NULL 更改或删除父表的主键中的值时,子表的外键中的相应值将设置为 NULL。
    • 设置默认值 当更改或删除父表的主键中的值时,子表的外键中的相应值将设置为你选择的默认值。
    • 不强制 此操作关闭此关系的引用完整性规则。

注意

如果禁用“设置 NULL”和“设置默认”选项,则关系很可能在“数据库属性窗口”的“杂项”选项卡上设置为“可选”。

设置列的默认值

若要使用 “设置默认” 操作,必须为列提供默认值。

  1. 双击关系图中的表以打开数据库属性窗口。
  2. 在“ 类别”下,单击“ ”,单击要为其创建默认值的列,然后单击“ 编辑”。
  3. 在“列属性”对话框的“定义”选项卡上,输入默认值的值。

使用表示法显示引用完整性

可以将文档选项设置为隐藏或显示模型中的关系线旁边的引用完整性表示法。

引用完整性表示法中的字母是什么意思?

引用完整性表示法以 [在父表中执行的操作]:[在子表中的结果]的形式显示两个以冒号分隔的字母的关系。 例如,d:C 表示在父表中删除某些内容时,更改会级联到子表。

父表中的操作用小写字母表示:

  • u 更新父表中的数据。
  • d 删除父表中的数据。

子表中的结果用大写字母表示:

  • R 无操作 不要更改子表。
  • C 级联 复制子表中的更改。
  • D 设置默认值 在子表中插入之前为该列设置的默认值。
  • N 设置 Null 将子表设置为 NULL。
  • (空白) 不要对此关系强制实施引用完整性。

注意

这些设置会影响实际数据库而不是模型中发生的情况。 在从现有数据库进行反向工程的模型中,可以查看数据库在引用完整性方面的设计方式。 在从头开始创建的模型中,可以使用这些设置来记录要建模的数据库的行为方式。

在 Visio 2010 中显示引用完整性

  1. 在“数据库”选项卡的“管理”组中,单击“显示选项”。
  2. 在“关系”选项卡上的“显示”下,选择“引用操作检查框。

找不到数据库建模功能?

某些版本的 Visio 没有数据库模型关系图模板。

Visio Standard 不包含数据库模型图模板。

Visio Professional 和 Premium 版本支持数据库模型图模板反向工程功能(即,使用现有数据库在 Visio 中创建模型),但它不支持正向工程(即,使用 Visio 数据库模型生成 SQL 代码)。

注意

可在 Visio for Enterprise Architects 中找到全套数据库建模功能,包括反向工程和正向工程。 Visio for Enterprise Architects 包含在 MSDN Premium 订阅中,可通过 Visual Studio Professional 和 Visual Studio Team System 基于角色的版本获取。

如果使用 Visio 计划 2并且想要了解如何将现有数据库设计为数据库模型,请参阅主题反向工程现有数据库