通常应用层的对象和数据库层的表是一对一的映射关系。
每当数据库模式发生变化时,这种耦合都会导致复杂性,并且应用程序版本可能与其正在与之通信的当前数据库版本不兼容。
我读到有一种由元数据驱动的数据库设计方法。从表中找到对象可用的字段之类的东西,然后完成查询。所以某种形式的方向是为了避免版本控制问题。
这种方法是否普遍使用,具体是如何实施的?还有其他方法可以解决这个问题吗?
通常应用层的对象和数据库层的表是一对一的映射关系。
每当数据库模式发生变化时,这种耦合都会导致复杂性,并且应用程序版本可能与其正在与之通信的当前数据库版本不兼容。
我读到有一种由元数据驱动的数据库设计方法。从表中找到对象可用的字段之类的东西,然后完成查询。所以某种形式的方向是为了避免版本控制问题。
这种方法是否普遍使用,具体是如何实施的?还有其他方法可以解决这个问题吗?
您想到的方法称为 Entity-Attribute=Value (EAV)。如果你用谷歌搜索它,你很快就会发现它几乎受到普遍的谴责。简而言之,这通常不是一个好主意,因为它不会让您的关系数据库管理系统执行其设计的任务。
作为替代方案,您应该将架构更改视为您需要保持向后兼容的东西。这通常意味着新列可以为空或设置默认值。但是,根据您要对应用程序执行的操作,有时数据库更改只是一个破坏性更改,您不能在不发布相应代码更改的情况下发布数据库更改。
我看到有些人在他们的数据库中保留了一个简短的代码表,其中包含版本信息(例如,支持的最小和最大代码版本)。这样做的想法是,当您的应用程序启动时,它会在代码表中进行快速查找,如果数据库版本与代码不兼容,则代码会正常退出。