Страницы

Поиск по вопросам

воскресенье, 26 января 2020 г.

Проблемы с проектированием базы данных на основе ORM

#ооп #orm #проектирование #kohana #php


Добрый день.
Сначала перечисляю сущности.
sуstems - некие системы.
preferences - некоторые настройки, сокращенно pref
pref имеет разные типы, например настройки кеша (cache) и тамаута (timeout).
Таким образом pref можно записывать в одну таблицу с полями id, value, type или в
две разные таблицы - prefcache и preftimeout с той же структурой. Идем дальше.
Поля таблицы system - id, name.
Осуществляется связь многие ко многим через таблицу prefs_systems с полями: id_system,
id_pref, type (можно вынести сюда в случае отдельных таблиц prefcache и preftimeout.
И вот зачем две таблицы pref, я хочу на каждую делать свой ORM, т.е. есть базовый
ORM_Pref extends ORM и от него наследуются ORM_Prefcache и ORM_Preftimeot. Каждый
работает со своей таблицей, а общие настройки в базовом классе.
В этом случае в каждой ORM прописываются связи $_has_many. В случае ORM pref все
очевидно, по одной записи связей $_has_many к ORM_System. В случае с описанием ORM_System
получается такая конструкция (додумался пока писал).
 protected $_has_many = array(
    'prefcache' => array(
        'model'       => 'orm_prefcache',
        'foreign_key' => 'id_system',
        'through'     => 'prefs_systems',
        'far_key'     => 'id_pref',
    ),
    'preftimeot'  => array(
        'model'       => 'orm_preftimeout',
        'foreign_key' => 'id_system',
        'through'     => 'prefs_systems',
        'far_key'     => 'id_pref',
    ),
);

Вопросы:

Почему редактор съел почти все символы нижнего подчеркивания?
Нормально ли я придумал структуру?
Могу ли я базовый класс ORM_Pref объявить абстрактным (т.к. у него нет привязанной
таблицы и его не надо создавать) ?
Можно ли как-то улучшить мою структуру? Если все выше правильно, то при добавления
нового типа настроек я должен буду прописать связь в ORM_System, это не удобно.
    


Ответы

Ответ 1



хорошо в таком случае использовать orm-библиотеки (напр. Doctrine). Можно создать схему в mysql workbench, форвард-инжинирингом создать БД и при помощи комманды doctrine сгенерировать сущности

Комментариев нет:

Отправить комментарий