使用ORM在不在数据库中的表上的外键

时间:2010-12-27 13:20:33

标签: php mysql orm doctrine propel

我有一个由几个数据库/网站共享的静态表entry。静态,我的意思是数据被读取但从未被网站更新。目前,所有网站都是从同一台服务器提供的,但可能会发生变化。

我希望尽量减少为每个网站创建/维护此表的需求,因此我考虑将其转换为存储在所有网站都可以访问的共享库中的变量。

问题是我使用ORM并使用外键约束来确保从该静态表中使用的ID的引用完整性所以将该表从MySQL数据库中删除为变量,如何我仍然可以获得从该表引用的ID的参照完整性吗?我是否必须完全以编程方式执行此操作,或者仍然有一个技巧仍然将数据视为来自真正的数据库表。

我的数据库定义(使用Propel)最初看起来像这样,其中refer表的字段linkto引用了id表的entry。既然entry表在代码中,我不能再做外键技巧,或者我能以某种方式获得相同的效果吗?

  <table name="entry">
    <column name="id" type="INTEGER" primaryKey="true" autoIncrement="true" />
    <column name="title" type="VARCHAR" size="500" required="true" />
  </table>

  <table name="refer">
    <column name="id" type="INTEGER" primaryKey="true" autoIncrement="true" />
    <column name="linkto" type="INTEGER"/>
     <foreign-key foreignTable="entry">
        <reference local="linkto" foreign="id" />
    </foreign-key>
  </table>

当然,还有其他任何有效的方法可以做同样的事情吗?我只是不想在几个网站上重复该表格。

1 个答案:

答案 0 :(得分:1)

你可以创建一个约束 - 一个强大的冗长,如果你的id FK被链接替换了 - 但是你仍然可以为每个网站维护这个约束现场。如果您想了解其他处理方式的建议,那么了解这些表实际跟踪/正在使用的内容会有所帮助。