应用程序和数据库架构
Application & Database architechture
每当我设计一个数据库(目前 SQL 服务器)时,我总是想知道如果将来我不得不迁移到另一个数据库(Oracle,MySql)是采取一些最佳方式考虑重要参数,如命名约定(表、列,包括长度)、数据类型等。我经常问自己以下问题:
我应该将表、列命名为 plural/descriptive 吗?
我应该在名称中添加前缀 tables/columns、下划线或任何其他标识符吗?
名字应该是 special/specific 大小写吗?
我正在尝试从开发的角度解决设计问题,即 .NET(按主要技能集),因此是否应该有任何存储的程序?如果不是,那么轻松迁移的替代方法是什么?在考虑数据库和 .NET 设计架构的情况下,是否有人可以建议任何推荐的指南?
从一种数据库类型转换为另一种数据库类型确实非常罕见:35 年来我做过一次:从 Oracle 到 SQL 服务器。那是一个例外情况:VAX 上的 Oracle 运行 版本非常旧,多年来一直没有任何人支持,因此必须摆脱它。管理层下令(我认为这是正确的),因为我们当时使用的标准 DBMS 是 QL Server,所以系统应该进行转换。
MS 有一个转换工具,我们使用了它。我工作得很好,但由于 PL/SQL 与 T/SQL 非常不同,复杂的存储过程虽然可以工作,但无法维护且非常慢,因此我们从头开始在 T/SQL 中重新编写它们 - 这花了相当多的时间。不过,这是唯一的问题。
我个人的做法是尽量减少 SP 的使用。如果您在 SP 中逐行处理游标,那么在我看来您做错了。任何处理 RAT(一次一行)的东西都应该在代码中;任何可以处理数据集的东西都应该在 SP 中。
除非您有理由认为您需要转换,否则我不会担心。如果你这样做,只要你用命名约定做一些明智的事情,就不会有问题。您会遇到的问题是:
- T/SQL 代码不容易转换为 PL/SQL(不知道 MySQL
语言,但我假设有问题)
- 分层查询 (CTE) 不会转换,必须针对 Oracle 重新编写。 MySQL AFAIK 不支持它们。
- 从 IDENTITY 列转换为 Oracle 序列应该不是什么大问题(或者 Oracle 现在是否支持更接近的东西?)不知道其他 DBMS。
但正如我所说,这不是我通常会担心的事情。
您是否尝试使用 ORM,例如 Entity Framework 代码优先方法?
它有助于避免代码中出现特定于数据库的内容,还提供了非常灵活的迁移机制。
每当我设计一个数据库(目前 SQL 服务器)时,我总是想知道如果将来我不得不迁移到另一个数据库(Oracle,MySql)是采取一些最佳方式考虑重要参数,如命名约定(表、列,包括长度)、数据类型等。我经常问自己以下问题:
我应该将表、列命名为 plural/descriptive 吗? 我应该在名称中添加前缀 tables/columns、下划线或任何其他标识符吗? 名字应该是 special/specific 大小写吗?
我正在尝试从开发的角度解决设计问题,即 .NET(按主要技能集),因此是否应该有任何存储的程序?如果不是,那么轻松迁移的替代方法是什么?在考虑数据库和 .NET 设计架构的情况下,是否有人可以建议任何推荐的指南?
从一种数据库类型转换为另一种数据库类型确实非常罕见:35 年来我做过一次:从 Oracle 到 SQL 服务器。那是一个例外情况:VAX 上的 Oracle 运行 版本非常旧,多年来一直没有任何人支持,因此必须摆脱它。管理层下令(我认为这是正确的),因为我们当时使用的标准 DBMS 是 QL Server,所以系统应该进行转换。
MS 有一个转换工具,我们使用了它。我工作得很好,但由于 PL/SQL 与 T/SQL 非常不同,复杂的存储过程虽然可以工作,但无法维护且非常慢,因此我们从头开始在 T/SQL 中重新编写它们 - 这花了相当多的时间。不过,这是唯一的问题。
我个人的做法是尽量减少 SP 的使用。如果您在 SP 中逐行处理游标,那么在我看来您做错了。任何处理 RAT(一次一行)的东西都应该在代码中;任何可以处理数据集的东西都应该在 SP 中。
除非您有理由认为您需要转换,否则我不会担心。如果你这样做,只要你用命名约定做一些明智的事情,就不会有问题。您会遇到的问题是:
- T/SQL 代码不容易转换为 PL/SQL(不知道 MySQL 语言,但我假设有问题)
- 分层查询 (CTE) 不会转换,必须针对 Oracle 重新编写。 MySQL AFAIK 不支持它们。
- 从 IDENTITY 列转换为 Oracle 序列应该不是什么大问题(或者 Oracle 现在是否支持更接近的东西?)不知道其他 DBMS。
但正如我所说,这不是我通常会担心的事情。
您是否尝试使用 ORM,例如 Entity Framework 代码优先方法? 它有助于避免代码中出现特定于数据库的内容,还提供了非常灵活的迁移机制。