внешний ключ на таблице, которой нет в базе данных, с ORM - PullRequest
4 голосов
/ 27 декабря 2010

У меня есть статическая таблица entry, которая используется несколькими базами данных / веб-сайтом. Под статическим я подразумеваю, что данные читаются, но никогда не обновляются веб-сайтами. В настоящее время все веб-сайты обслуживаются с одного сервера, но это может измениться.

Я хочу минимизировать необходимость создания / ведения этой таблицы для каждого из веб-сайтов, поэтому я подумал о том, чтобы превратить ее в переменную, которая хранится в общей библиотеке, к которой имеют доступ все веб-сайты.

Проблема в том, что я использую ORM и использую ограничения внешнего ключа для обеспечения ссылочной целостности идентификаторов, используемых из этой статической таблицы, поэтому, удалив эту таблицу из базы данных MySQL в переменную, как можно Я все еще получаю ссылочную целостность для идентификаторов, на которые ссылаются из этой таблицы? Должен ли я делать это полностью программно или есть хитрость, чтобы все еще обрабатывать данные, как будто они поступают из реальной таблицы БД.

Определение моей базы данных (с использованием 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 Ответ

1 голос
/ 27 декабря 2010

Вы можете создать ограничение - мощное многословное, возможно, если ваш id FK будет заменен ссылкой - но тогда вы все равно сможете поддерживать это ограничение для каждого веб-сайта.Было бы полезно узнать, для чего эти таблицы на самом деле отслеживаются / используются, если вам нужны предложения по другим способам обработки.

...