Russian Qt Forum
Ноябрь 24, 2024, 09:57
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Model-View (MV)
>
Связи между моделями
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Связи между моделями (Прочитано 5859 раз)
proton
Гость
Связи между моделями
«
:
Октябрь 13, 2009, 19:14 »
Наверно я не понимаю концепций MVC, но такой вот вопрос:
Возьмем простейшую базу данных:
таблица Писатель с полями id, ФИО, год рождения и т.д.
таблица Книга с полями id, Название, id_писателя и т.д.
Раньше у меня все это красиво хранилось в виде
struct Писатель
{
string ФИО;
int год рождения;
};
struct Книга
{
string Название;
int id_писателя;
};
map<int, Писатель> Писатели; //где int - id писателя
map<int, Книга> Книги; //где int - id книги
и я мог удобно получить как данные о всех писателях, так и о написавшем книгу (Писател
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Связи между моделями
«
Ответ #1 :
Октябрь 13, 2009, 20:01 »
to be continued...
в простешем случае MVC ставит соответствие вьюху одной таблице. Чтобы объединить несколько таблиц, нужно придумать правила по которым они отобразятся в одну. В вашем примере можно сделать дерево глубиной 2: корни - писатели, листья - книги.
Также можно оставить 2 таблицы. Еще можно сделать таблицу книг, в которой один из столбцов - писатель. Всё зависит от того, какую информацию вы хотите преподнести пользователю.
Записан
CroCIV
Гость
Re: Связи между моделями
«
Ответ #2 :
Октябрь 14, 2009, 12:47 »
а еще бы вопрос всетаки услышать ))
Записан
proton
Гость
Re: Связи между моделями
«
Ответ #3 :
Октябрь 14, 2009, 18:44 »
Цитата: Авварон от Октябрь 13, 2009, 20:01
to be continued...
в простешем случае MVC ставит соответствие вьюху одной таблице. Чтобы объединить несколько таблиц, нужно придумать правила по которым они отобразятся в одну. В вашем примере можно сделать дерево глубиной 2: корни - писатели, листья - книги.
Также можно оставить 2 таблицы. Еще можно сделать таблицу книг, в которой один из столбцов - писатель. Всё зависит от того, какую информацию вы хотите преподнести пользователю.
Я хочу при выборе книги выводить данные ее писателя по его id
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Связи между моделями
«
Ответ #4 :
Октябрь 14, 2009, 20:14 »
ну так в чем проблема? Модель берет данные из таблицы (массива, списка) с книгами. При даблклике (или чем нибудь еще) показываем данные по ид из списка с авторами
Записан
lit-uriy
Джедай : наставник для всех
Offline
Сообщений: 3880
Re: Связи между моделями
«
Ответ #5 :
Октябрь 14, 2009, 21:41 »
QSqlRelationTableModel ?
Записан
Юра.
proton
Гость
Re: Связи между моделями
«
Ответ #6 :
Октябрь 18, 2009, 18:29 »
Цитата: Авварон от Октябрь 14, 2009, 20:14
ну так в чем проблема? Модель берет данные из таблицы (массива, списка) с книгами. При даблклике (или чем нибудь еще) показываем данные по ид из списка с авторами
В таком случае происходит дублирование данных (они хранятся как в модели, так и в векторе/списке/мапе).
Смысл тогда в MVC? Никак не пойму идеологию.
Приходится писать костыли, чтобы можно было работать в Qt.
Записан
fuCtor
Гость
Re: Связи между моделями
«
Ответ #7 :
Октябрь 19, 2009, 08:57 »
Цитата: proton от Октябрь 18, 2009, 18:29
Цитата: Авварон от Октябрь 14, 2009, 20:14
ну так в чем проблема? Модель берет данные из таблицы (массива, списка) с книгами. При даблклике (или чем нибудь еще) показываем данные по ид из списка с авторами
В таком случае происходит дублирование данных (они хранятся как в модели, так и в векторе/списке/мапе).
Смысл тогда в MVC? Никак не пойму идеологию.
Приходится писать костыли, чтобы можно было работать в Qt.
Модель это лишь абстракция над вектором/списком/мапой/БД, и данные хранятся не в модели, а в том с чем работает эта модель.
Записан
break
Гипер активный житель
Offline
Сообщений: 846
Re: Связи между моделями
«
Ответ #8 :
Октябрь 20, 2009, 03:19 »
Цитировать
Модель это лишь абстракция над вектором/списком/мапой/БД, и данные хранятся не в модели, а в том с чем работает эта модель.
Можно написать кривую модель которая будет дублировать в себе все данные и к тому же тормозить, можно нормальную которая будет только брать данные откуда они хранятся - автору рекомендую подробно изучить доку в ассистенте и особенно примеры - таки как simpleTreeView модель, но вообще если речь о связи двух таблиц по вторичному ключу - (таблица книг имеет вторичный ключ на таблицу писателей) то как и было предложено выше должно хватить QSqlRelationTableModel или QSqlTableModel с делегатом отображения/выбора писателя... Автор у вас вероятно нехватка знаний реляционных БД раз вы структурами ранее эту задачу решали, если вы четко понимаете что такое один к одному, один ко многим, многие ко многим - то все решите!
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...