是否应被视为"最佳做法"将数据库表名存储在配置文件中?
我知道将表名存储在配置文件中会使未来的更新更容易:如果重命名表,则只需要更新一个文件。
但是,假设检索表名是使用如下函数完成的:getTableName_Customers()(假设表名是Customers)
如果将表Customer重命名为Clients,我们还应该将函数名更新为getTableName_Clients(),这意味着所有出现的getTableName_Customers()也将"具有"在源代码中重命名。
对我而言,最终重命名所有源文件中所有出现的硬编码表名。
表格名称应该存储在配置文件中还是应该保留为"硬编码"在源代码中? 在这件事上有没有最好的做法?
谢谢
答案 0 :(得分:0)
如果表
Customers
重命名为Clients
,我们还应将函数名称更新为getTableName_Clients()
。
这取决于提示重命名的内容。如果它是"技术"重命名(在多租户数据库中将customers
重命名为acme_customers
),当然,您不需要重命名您的功能。这就是抽象的全部目的。类似于customers
=> clients
。对于同样的事情,它似乎只是一个不同的名称。
但是,如果名称是由"更大的"更改,然后更好地重命名该功能,以反映更改(例如,现在customers
为users
,引用为customer_profile
)。
答案 1 :(得分:0)
答案取决于您要优化的内容以及应用程序连接到数据库的方式。
如果您正在尝试创建一个易于维护的程序来直接访问数据库,您可以使用这种方法,假设数据库表名称经常更改的操作环境。但是,这种方法会牺牲每次查询创建时需要函数调用的性能。例如。
String query="select * from "+getTableName_Customers();
使用缓存机制可以轻松修复性能,但需要更多工作。 考虑到大多数IDE的重构工具集,重命名函数应该是一项简单的任务。
当程序直接管理数据库时,使用单个类编写所有查询和表是常见的做法。
作为最佳实践,最好使用持久性框架,例如Hibernate(http://hibernate.org/)。这将抽象大部分维护工作并提供其他优势。
答案 2 :(得分:0)
在大多数开发环境中,数据库与您的代码库分开,例如Java& Postgres,是的,您必须手动更新代码库,以便与数据库中的名称更改保持同步。
与数据库集成的开发环境中不存在问题,例如4D或Filemaker,其中名称更改会自动在整个代码库中渗透。
您可能想了解数据库迁移工具,例如Flyway或Liquibase或其他人。
这些工具提供了一种有条理的方式来定义数据库,添加/删除/修改表,添加/删除/修改列,添加/删除/修改索引等。该工具查看现有数据库并自动应用任何尚未应用的修改。
该工具跟踪文件中的数据库迁移脚本(SQL或其他如XML或Java代码等)。如果在您的情况下有意义,您可以选择将这些文件与应用程序的源代码一起保存。
因此,当您决定将Customer
表重命名为Client
时,可以使用某些搜索和替换操作更新Java代码。同时,编写数据库修改脚本。请放心,当遇到需要更新的数据库时,您的数据库迁移工具将自动应用最新的脚本。
是的,使用迁移工具,您仍然需要在两个位置更改名称(应用代码和迁移脚本),但您可以方便地同时执行这两项操作,而不用担心部署。