Форум программистов, компьютерный форум, киберфорум
ООП и паттерны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1

ORM и наследование

07.03.2013, 18:39. Показов 2109. Ответов 3

Студворк — интернет-сервис помощи студентам
Доброго времени суток!

Изучаю HMVC-подход к разработке веб-приложений, застрял в части "M", конкретно - в представлении данных как объектов (ORM).

Допустим есть, некое веб-приложение. В нём есть статьи (класс Model_Article), фотографии (класс Model_Photo) и комментарии (класс Model_Comment).

Комментарии могут быть как у статьи, так и у фотографии; следовательно, логичным решением, как мне кажется, было бы представление всех комментариев как экземпляров Model_Comment.

Вопрос: как организовать БД-часть приложения?

Вижу два варианта.

Первый: все комментарии хранить в одной таблице, а связь со статьями или фотографиями обеспечивать разными полями:

Code
1
id | article_id | photo_id | user_id | text
Если photo_id != 0 - то это комментарий к фото с ID = photo_id.
Если article_id != 0 - то это комментарий к статье с ID = article_id.

Второй: комментарии для статей хранить в одной таблице, для фотографий - в другой. Весь функционал модели вынести в абстрактный класс Model_Comment_Base, а привязку к конкретной таблице сделать в наследниках этого класса.

Первый подход некрасиво выглядит в базе, второй сложнее сопровождать: при обновлении ПО и добавлении столбца необходимо будет изменить таблицы всех комментариев. Понятно, что вместо <комментариев> могут быть любые другие сущности, в том числе встречающиеся в ПО очень часто.

Скажите, пожалуйста, какой из двух вариантов лучше, и какие есть ещё?

Спасибо.

Добавлено через 1 минуту

Не по теме:

Возможно, разместил тему не в той ветке. В этом случае прошу перенести в правильную.

0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.03.2013, 18:39
Ответы с готовыми решениями:

Django ORM запрос с подзапросом или переведите SQL в запрос Django ORM
В общем весь вопрос был в заголовке! Есть запрос на SQL он работает нормально вот только не знаю как заставить Django-mptt корректно на...

JDBC vs ORM
Читаю про ORM и столкнулся с непониманием одного из преимуществ. Есть класс Employee: public class Employee { private int...

Doctrine/orm
Добрый вечер! Подключил к проекту монстра doctrine/orm Инициализировал /** * @return mixed

3
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,764
08.03.2013, 13:17
Цитата Сообщение от talis Посмотреть сообщение
какие есть ещё?
Например такой:

comments:
iduser_idtext

article_comments:
article_idcomment_id

photo_comments:
photo_idcomment_id
1
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
08.03.2013, 13:20  [ТС]
korvin_, спасибо!

Скажите, а есть ли у этих "способов" названия или некий обобщающий термин? Просто хотелось бы почитать статьи и умные книжки по этому поводу, а я даже не знаю, что спрашивать у гугла.
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
08.03.2013, 13:28
Цитата Сообщение от korvin_ Посмотреть сообщение
Например такой:
Цитата Сообщение от talis Посмотреть сообщение
Скажите, а есть ли у этих "способов" названия или некий обобщающий термин?
что-то в этом подходе есть от отшения m:n, хотя фактически его нет

Цитата Сообщение от talis Посмотреть сообщение
article_id | photo_id | user_id
а эти 3 поля можно заменить одним, comment_type, у которого могут быть три допустимых значения article, photo, user.
ну и информация к размышлению
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.03.2013, 13:28
Помогаю со студенческими работами здесь

ORM vs SQL
Здравствуйте, сейчас занимаюсь проектированием интернет-ресурса. Проект на нативном пхп. Набор данных схож с большинством популярных cms -...

ExpandoObject и ORM
Есть ли возможность записать/считать ExpandoObject из БД при помощи ORM? Например entity.

ORM redbean php
&lt;?php require 'rb.php'; R::setup( 'mysql:host=localhost;port=3306;dbname=users222', 'root' ); $data = $_POST; ...

ORM запрос Kohana
Всем доброго времени суток. Есть такой запрос. public function get_article($id = '') { $sql = &quot;SELECT * FROM...

Внедрение в код ORM
доброе время суток коллеги, столкнулся с такой проблемой, нашел задачу в интернете возникло желание попробовать решить ее но не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru