做项目时应怎样注意外键关系

对于 外键不同公司处理的机制不同的.

某些公司, 是不显示定义外键的.表关联的时候, 自己 写关联条件。这种方式的好处是, 开发阶段, 可能要经常清理数据。  没有外键约束, 可以自由清除。缺点嘛, 就是 如果你的项目,访问数据库的代码, 是 ORM 工具生成的话。 例如 微软的 Linq to SQL 或者  Entity Framework.  如果你没有外键, 工具不会自动生成关联。

某些公司, 是显示定义外键的.好处就是 数据完整性有保障。ORM 工具生成代码的时候,可以帮你把关联属性生成出来。缺点嘛, 假如你开发阶段, 会经常清理测试数据的话, 恐怕有点麻烦。因为有外键的表。好像没法  TRUNCATE  TABLE  快速把数据处理掉 ( 我用的是 SQL Server )你要写 .sql  脚本清理数据的话。要自己定义好删除的顺序。也就是 对于一对多, 要先删除子表的数据, 后删除主表的数据。或者批量的暂时禁用所有的外键,清除数据,最后恢复外键。
时间: 2024-08-06 08:00:52

做项目时应怎样注意外键关系的相关文章

Hinernate进行mysql数据库的逆向工程无法生成主外键关系

(1)我们在进行SSH开发大※的项目的时候,使用myeclipse自带的hibernate的逆向工程工具时,发现竟然无法生成one-to-one  one-to-many等的主外键关系,明明的数据库建时已经有主外键关系了.为啥逆向生成时就不行了呢? (2)首先说一下,我使用的是PHP开发环境Appserv自带的MySQL数据库,不是单独安装的: (3)这是因为数据库引擎的问题, 我们可以在sql命令行中输入命令:show engines; 可以看到default默认的是MyISAM: (3)"M

SQL Server数据库中导入导出数据及结构时主外键关系的处理

2015-01-26 软件开发中,经常涉及到不同数据库(包括不同产品的不同版本)之间的数据结构与数据的导入导出.处理过程中会遇到很多问题,尤为突出重要的一个问题就是主从表之间,从表有外检约束,从而导致部分数据无法导入. 情景一.同一数据库产品,相同版本 此种情况下源数据库与目标数据库的数据结构与数据的导入导出非常简单. 方法1:备份源数据库,恢复到目标数据库即完成. 方法2:使用SQL Sever数据库自带的[复制数据库]功能或者[导入数据]功能按照向导操作即可. 情景二.同一数据库产品,不同版

分布式或大型互联网项目中,数据库物理外键移除的原因

1.性能影响 大型互联网项目或者分布式项目,进行更新操作时,会在影响数据库性能 2.热更新 如果数据库存在外键,会导致新更新上去的代码无法运行,可能产生冲突,需要重新启动项目 3.降低耦合度 删除外键是指物理上删除外键,但是逻辑上还是存在外键的,这样就降低了表与表之间的耦合度(举个例子:用户表与用户订单表,用户订单表是有user_id字段,要查询用户订单,要通过user_id,这个user_id字段还是存在的) 4. 数据库分库分表 导致分库分表难以实现,举个例子,用户表和订单表有个外键关联,做

Sql Server有主外键关系时添加、删除数据

当表之间有主外键关系时删除数据会被约束,添加.删除失败 解决办法,我们可以先把主外键关系的检查约束给关掉 → 然后删除数据 → 之后再把约束打开 查询出关掉所有外键约束的语句 SELECT 'ALTER TABLE ' + O.NAME + ' NOCHECK CONSTRAINT [' + F.NAME + '];' AS COMMAND FROM SYS.FOREIGN_KEYS F INNER JOIN SYS.ALL_OBJECTS O ON F.PARENT_OBJECT_ID = O

Entity Framework Code First主外键关系映射约定

本篇随笔目录: 1.外键列名默认约定 2.一对多关系 3.一对一关系 4.多对多关系 5.一对多自反关系 6.多对多自反关系 在关系数据库中,不同表之间往往不是全部都单独存在,而是相互存在关联的.两个不同表之间可以存在外键依赖关系,一个表自身也可以有自反关系(表中的一个字段引用主键,从而也是外键字段). Entity Framework Code First默认多重关系的一些约定规则: 一对多关系:两个类中分别包含一个引用和一个集合属性,也可以是一个类包含另一个类的引用属性,或一个类包含另一个类

mysql|中主外键关系(转)

http://my.oschina.net/liting/blog/356150 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的.所以说,如果谈到了外键,一定是至少涉及到两张表.例如下面这两张表: 上面有两张表:部门表(dept).员工表(emp).Id=Dept_id,而Dept_id就

mysql中主外键关系

一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的.所以说,如果谈到了外键,一定是至少涉及到两张表.例如下面这两张表: 上面有两张表:部门表(dept).员工表(emp).Id=Dept_id,而Dept_id就是员工表中的外键:因为员工表中的员工需要知道自己属于哪个部门,就可以通过外键Dep

多重外键关系在java中的处理方案

目录:(点击红色方框展开子目录) 问题描述 无 项目案例说明 业务描述 数据库说明 项目源码及下载 无 问题描述 如上两图,数据库中各个表之间有很多的外键关系,其中业务关系是一个用户下有该用户的订单,该订单中有多个订单条目,订单条目中是商品 . @问题 如此的数据关系,如何在java开发中定义各种类 .要显示出商品信息,如何在商品信息中显示出外键关联的分类信息? 本文项目案例 @本文案例中,外键关系定义为类,比如把分类类作为商品类的一个属性 . 除此之外,在dao层中调用ToBookUtils建

PowerDesigner删除外键关系,而不删除外键列[转]

PowerDesigner中配置外键关系时,如果要删除配置的外键关系,默认设置会一同删除外键列. 要更改此设置,需在菜单栏tools中打开Model Options,在Model Settings中点击Reference, 然后把"Auto-migrate columns"这个checkbox的勾去掉即可.