在PowerDesigner中设计物理模型1——表和主外键

原文:在PowerDesigner中设计物理模型1——表和主外键

在PD中建立物理模型由以下几种办法:

  1. 直接新建物理模型。
  2. 设计好概念模型,然后由概念模型生成物理模型。
  3. 设计好逻辑模型,然后由逻辑模型生成物理模型。
  4. 使用逆向工程的方法,连接到现有的数据库,由数据库生成物理模型。

物理模型能够直观的反应出当前数据库的结构。在数据库中的表、视图、存储过程等数据库对象都可以在物理模型中进行设计。由于物理模型和数据库的一致性,接下来以数据库对象和物理模型对象的对应来一一介绍:

新建物理模型时需要指定物理模型对应的DBMS,这里我们使用SQL Server 2008,新建一个物理模型后,系统会显示一个专门用于物理模型设计的工具栏:

若要在物理模型中添加一个表,单击“表”按钮,然后再到模型设计面板中单击一次便可添加一个表,系统默认为表命名为Table_n,这里的n会随着添加的表增多而顺序增加。添加的表是没有任何列的,如图所示:

单 击工具栏的鼠标指针按钮,将鼠标切换回指针模式,然后双击一个表,系统将打开表属性窗口,在General选项卡中可以设置表的Name、Code等属 性。例如我们要新建一个教室表(ClassRoom),则可修改Name和Code。Name是在模型中显示的名称,Code是生成数据库表的时候的实际 表名。另外Name中的内容还会作为SQL Server中的表备注。

单击Columns切换到列选项卡,在下面的列表中可以添加表中的列。Name是模型上显示的名称,Code是生成的实际的表名,后面的3个复选框P代办主键、F代表外键,M代表不能为空。为教室表设计了两个列,如图所示:

 

主键

在设计一个表时,一般情况下每个表都会有一个主键,主键分为单列主键和复合主键。在为表设置主键时有以下几种办法:

1.在Columns选项卡中,直接选中主键列的P列复选框,这是最简单的方式。

2.选中一个列,然后单击工具栏中的“属性”按钮,系统将弹出列属性窗口,在该窗口中可以设置该列的各种属性,当然也包括该列是否是否是主键。另外还有一个很重要的复选框是“Identity”。选中Identity复选框则表示该列为自增列。

3.切换到Keys选项卡中,在其中添加一行命名为PK_ClassRoom,然后单击工具栏的“属性”按钮,打开键属性窗口,在该窗口中切换到Columns选项卡,单击添加列按钮,弹出列选择窗口,选中主键中应该包含的列,单击确定按钮即可完成主键的创建。

另外需要注意的是,在建立主键时,系统会在主键上建立索引,索引分为聚集索引和非聚集索引,在“键属性”窗口的General选项卡中可以设置该主键上建立的索引是聚集索引还是非聚集索引,如图所示:

外键

如 果是由概念模型或者逻辑模型生成物理模型,那么外键是通过Relationship生成的,也可以通过工具栏中的Reference来实现两表之间的外键 关系。假如一个课程只会在一个固定的教室上课,而一个教室会安排多个课程在不同的时间上课,所以教室和课程是一对多的关系,那么课程表中就需要添加 RoomID列以形成外键列,具体操作方法就是在工具栏中单击“Reference”按钮,然后在设计面板中,课程表上按下鼠标左键,并拖拽到教师表中放 开鼠标,这时如果课程表中没有RoomID列,系统会自动创建RoomID列并创建该列上的外键引用,如果已经存在RoomID列,则只添加外键引用,不 会再添加新列。

 

切换到鼠标指针模式,双击箭头,系统将弹出引用的属性窗口,在属性窗口中可以设置该引用的Name、Code、关联的列、约束名、更新策略和删除策略等。

下一篇文章将会介绍其他约束具体包括:

1.CHECK约束

2.默认值约束

3.非空约束

……

另外在物理模型中还包括:视图、存储过程、函数、触发器等都会在接下来的几篇文章中讲解到。

时间: 2025-01-07 18:21:30

在PowerDesigner中设计物理模型1——表和主外键的相关文章

探讨SQL利用INFORMATION_SCHEMA系统视图如何获取表的主外键信息_Mysql

接着上篇文章<解析SQL 表结构信息查询 含主外键.自增长>里面提到了INFORMATION_SCHEMA视图,其实到了SQL 2005微软都主推大家使用INFORMATION_SCHEMA系统视图,而不是在使用sys东东了,当然目前还是有许多信息只能通过sys视图来查询.这里我们还是以查询表结果信息为例来说明一些主要的INFORMATION_SCHEMA视图的使用.首先我们需要查询列的信息,这需要用到[INFORMATION_SCHEMA].[COLUMNS]系统视图来查询数据列的信息,SQ

求教EF6,使用Fluent API怎么实现,同一个表的主外键关联关系

问题描述 看下面的代码结构,ParentNode是节点的父节点,请问使用FluentAPI怎么实现外键同表的操作,谢谢publicclassNode{publicintId{get;set;}publicstringTitle{get;set;}publicstringDescription{get;set;}publicNodeParentNode{get;set;}}

[20151231]主外键与空表.txt

[20151231]主外键与空表.txt --主外键的测试例子很多,今天做一个特别的,外部键表为空,也会出现阻塞吗?测试看看. 1.建立环境: SCOTT@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------- -------------------------------------------------------

sql-SQL:一个留言板小系统。主外键关系的确定问题

问题描述 SQL:一个留言板小系统.主外键关系的确定问题 CREATE TABLE gbook--用户留言表 ( [id] int identity(1,1) not null, [title] nvarchar(50) collate Chinese_PRC_CI_AS null,--用户留言的标题. [name] nvarchar(50) collate Chinese_PRC_CI_AS null,--用户名称 [time] datetime null,--用户留言的时间. [conten

powerdesigner-【新兵营】PowerDesigner中如何生成的Ldm只有主外键

问题描述 [新兵营]PowerDesigner中如何生成的Ldm只有主外键 大家好!我想请问下PowerDesigner中如何生成的Ldm只有主外键,例如这样的![图片说明](http://img.ask.csdn.net/upload/201602/17/1455699737_92325.jpg) 每张表都只显示外键跟主键,并且表明他们的关系, 谢谢大家!祝大家新年快乐! 解决方案 用的比较少:看看这个文章吧!http://blog.csdn.net/zhang6622056/article/

城市,区县,地址,没有主外键区分,没有父级ID,所以数据在一个表如何实现级联查询?

问题描述 城市,区县,地址,没有主外键区分,没有父级ID,所以数据在一个表如何实现级联查询? 城市,区县,地址,没有主外键区分,没有父级ID,所以数据在一个表如何实现级联查询? 解决方案 一般这样的情况都是三张表.如果你要放在一张表里面,那么你肯定会有一个父级ID的呀.不然怎么区分,怎么级联? 解决方案二: 都在一个表,我也很纳闷,接手的项目数据库是这样,表示压力好大 解决方案三: 一般不是全在一张表,用level和parentId来区分关联:就是三张表,parentId关联. 没有parent

mysql-怎么用程序保证表之间的关联,而不是主外键?

问题描述 怎么用程序保证表之间的关联,而不是主外键? 今天看到这个问题有点疑惑:网上说为了保证数据操作及维护,不建立任何外键,用程序保证关联关系,不建立任何外键关系我明白了,但不知道怎么用程序保证关联关系,,这句话是什么场景,又怎么保证联表查询那??? 解决方案 因为表之间有外检关系的话,数据的读写都会有相对程度的性能影响. 程序来保证起关联就是,增加的时候一起增加,删除的时候一起删除,所有的关联逻辑用程序来管理就可以了.

表B的主键是表A的外键,用hibernate怎么生成相应的实体类和映射文件呢?

问题描述 有两张表A,B,表B的主键是表A的外键,用hibernate怎么生成相应的实体类和映射文件呢? 解决方案 解决方案二: 解决方案三:搜下hibernate@OneToMany或者@ManyToOne用注释比较方便解决方案四:引用2楼u012895467的回复: 搜下hibernate@OneToMany或者@ManyToOne用注释比较方便 在实体类A中有个表示表中主键成员变量deelid,在实体类B中有个privateAa;在表B中的主键字段是deelid,且是表A中字段deelid

[20151231]主外键与空表(12c).txt

[20151231]主外键与空表(12c).txt --主外键的测试例子很多,今天做一个特别的,外部键表为空,也会出现阻塞吗?测试看看. 1.建立环境: SCOTT@test01p> @ver1 PORT_STRING                    VERSION        BANNER                                                                               CON_ID --------------