Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 数据库架构中的更改(细微的或不细微的)会中断应用程序_Mysql_Sql_Database_Database Design_Schema - Fatal编程技术网

Mysql 数据库架构中的更改(细微的或不细微的)会中断应用程序

Mysql 数据库架构中的更改(细微的或不细微的)会中断应用程序,mysql,sql,database,database-design,schema,Mysql,Sql,Database,Database Design,Schema,除了显而易见的删除列、重命名列/表、删除表/架构之外,数据库架构中的更改列表可能会破坏使用它的应用程序吗? 是否可以给出一些具体的例子?任何改变数据库逻辑状态的行为都可能破坏依赖于它的代码。例如,对数据类型、键或完整性约束的更改可能会破坏需要特定类型数据或假定应用特定约束的业务逻辑 遗憾的是,许多现代SQL DBMS都损害了物理数据独立性,以至于用于定义逻辑特征的语法和用于物理特征的语法之间的重要区别变得模糊或完全消失。例如,索引定义语法也可用于定义键约束(ISO标准SQL中没有此类索引语法)

除了显而易见的删除列、重命名列/表、删除表/架构之外,数据库架构中的更改列表可能会破坏使用它的应用程序吗?
是否可以给出一些具体的例子?

任何改变数据库逻辑状态的行为都可能破坏依赖于它的代码。例如,对数据类型、键或完整性约束的更改可能会破坏需要特定类型数据或假定应用特定约束的业务逻辑

遗憾的是,许多现代SQL DBMS都损害了物理数据独立性,以至于用于定义逻辑特征的语法和用于物理特征的语法之间的重要区别变得模糊或完全消失。例如,索引定义语法也可用于定义键约束(ISO标准SQL中没有此类索引语法)


DBMS并不总是明确区分逻辑关注点和物理关注点这一事实可能解释了这个问题的必要性。这应该是一个非常容易回答的问题,但DBMS供应商糟糕的设计决策使事情变得比他们需要的复杂得多。因此,回答这个问题的唯一方法是彻底理解数据库原理,然后了解您的软件,这样您就可以正确区分您正在使用的DBMS的逻辑和物理特性。

这个问题太宽了,但是,由于几乎每个模式更改对应用程序都是可见的,因此任何模式更改都可能破坏应用程序。您所说的“索引定义语法也可用于定义键约束”是什么意思。索引是使用
create index
定义的,主键/外键是使用
alter table
@horse定义的,是的,但在许多SQL版本中,您可以使用UNIQUE关键字作为索引定义的一部分,在索引列上创建唯一性约束,即键约束。