Добрый день!
Модель такая:
Ответ (
Reply) может содержать несколько оснований (
Basis). Соовтетственно, в
Reply есть ivar по имени bases, которая содержит
OrderedCollection. Как это отразить в реляционную базу данных с помощью GLORP (если это важно, я использую его с ActiveRecord)?
На данный момент у меня есть класс
MyDescriptorSystem с двумя методами:
MyDescriptorSystem >> tableForBasis: aTable
(aTable createFieldNamed: 'id' type: platform serial) bePrimaryKey.
aTable createFieldNamed: 'page' type: (platform varchar: 200).
aTable createFieldNamed: 'pool' type: (platform varchar: 200).
aTable createFieldNamed: 'register' type: (platform varchar: 200)
MyDescriptorSystem >> tableForReply: aTable
(aTable createFieldNamed: 'id' type: platform serial) bePrimaryKey.
#('content' 'date' 'number' 'result' 'request' 'bases')
do: [:each | aTable createFieldNamed: each type: (platform varchar: 200)]
Странность второго метода объясняется необходимостью задать соответствия для всех ivar-ов в классе, иначе GLORP выкидывает исключение в процессе построения таблиц (возможно это какая-то фишка ActiveRecord?). Явно этого можно избежать, но я не знаю как. И в этом заключается первый вопрос: как "проигнорировать" некоторые поля?
В РБД связь между
Ответом и
Основаниями можно реализовать двумя вариантами:
1. Связь (по ID ответа) из таблицы
BASIS в таблицу
REPLY. Если я не хочу заводить ссылку на
REPLY в объектах
BASIS модели, то как описать таблицу
BASIS так, чтобы там было "лишнее" поле
reply_id? И как вообще такую связь описать, чтобы GLORP все правильно загружал?
2. Заводим дополнительную таблицу
BASES, в которой есть два поля: ссылки (id) на
REPLY и
BASIS. По сути, реализуем схему многие ко многим. Тоже не знаю, как описать это в GLORP-е.
Есть ли другие варианты?
Принимаются как прямые ответы на эти вопросы, так и ссылки на документацию. Мне готового рецепта найти не удалось.
--
Dennis Schetinin
--
http://groups.google.ru/group/sugr