2014-10-03 52 views
0

在(MySQL)数据库中,我存储了一个视图层次结构,每个表中的每行都引用一个视图。有几种类型的视图,但它们存储在同一个表中。如何从数据库中引用代码中的硬编码值?

在应用程序代码中,每种类型的视图都有它自己的类。数据库中的每一行都会实例化这些类中的一个。

我该如何从数据库中引用这些类,以便应用程序知道使用哪个类?

我能想到的几种可能性:

  • 只需直接在表中指定的类名,但是这需要改变许多行的缺点,如果类名称的变化(这是可以做到如果需要,在单个查询中)。
  • 有一个单独的表存储类名,并使用外键指向存储正确类名的行。在这种情况下,我可以放弃在此查找表中使用ID字段,而将类名称作为主键和目标外键,并且如果类名更改,则依靠级联UPDATE

有更好的选择吗?

回答

0

如果我理解正确,您希望维护视图名称和类名称之间的关联。

你的项目符号表明,对于同一个类可以有多个视图,并且你的两个建议都可以工作。第二个项目符号的优点是可以通过单个更新来更改类名称。但是这并不会给你带来太多的收益,因为一旦不止一个类名发生变化,即当关联本身发生变化时,就需要更新多行。

你甚至可以创建一个单独的表,持有这个关联。这将成为n:m关系的模型,这太笼统了,因此您必须在视图名称上添加一个唯一约束。从本质上讲,这只是将视图名称与类名关联起来的问题,并允许您完全更改此机制,而不必混淆您的表(除了拥有此关联的表)。我实际上不会在数据库中存储任何这些东西 (我也发现视图名称存储在数据库中而不是应用程序逻辑中令人不快)。有类名的事实应该与你的数据库无关。这是应用程序逻辑,应该在那里处理。所以你需要的是在视图名称已知时实例化对象的方法。这看起来像我经典的工厂。毕竟,如果类名称发生更改,那么应用程序代码中的更改将更加容易,并且所有更改的结果都位于应用程序代码中。

+0

如果我不在数据库中的任何位置存储类名,那么如何知道在应用程序逻辑中实例化哪个类?还是应该使用一些单独的标识符,这些标识符仍然需要在某个地方硬编码到类中? – Robert 2014-10-03 10:39:43

相关问题