Russian Qt Forum
Апрель 18, 2024, 09:06 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: бд связь один ко многим  (Прочитано 2819 раз)
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« : Август 20, 2016, 12:06 »

Никогда не писал ПО для БД. Надо написать клиента для БД.
Читал доки по QtSql но так и не понял как реализовать связь
"один ко многим". Есть класс  QSqlRelationTableModel
с помощью которого можно реализовать связь "один к одному".
Не могли бы вы привести пример реализации или наставить на путь
истинный.
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #1 : Сентябрь 06, 2016, 21:11 »

Мне видится только один правильный путь.

Связи задаются в БД - то есть там есть две таблице с сущностями для которых надо задать связи. Для этих таблиц обязательно наличие суррогатных первичных ключей (а я приверженец такого подхода, что суррогатный первичный ключ нужен всем и каждой таблице в любой БД). И есть третья таблица в которой и задается связь многие ко многим, через ИД-шники первых двух таблиц. То есть имеет вид

ROW_ID | TABLE_1_ROW_ID | TABLE_2_ROW_ID

ROW_ID - собственный суррогатный ключ таблицы связей
TABLE_1_ROW_ID И TABLE_2_ROW_ID - ключи связываемых таблиц

По полям TABLE_1_ROW_ID И TABLE_2_ROW_ID должен быть создан уникальный индекс

Далее для вывода на клиент - как больше нравится или запрос с джойнами или хранимая процедура, если сервер БД их поддерживает. То есть этот запрос или ХП выводит уже не ИД-шники, а данные с ними связанные в своих таблицах.

Вызов ХП или запрос кладется в QSqlQueryModel - ну и все в таблице будет видно.

НО функционал QSqlQueryModel крайне ограничен и уже добавлять и редактировать/удалять записи через нее быдет сложно, т.к. нельзя задать отдельных запросов InsertSQL, RemoveSQL и т.д. Мне пришлось для таких целей писать свою модель.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 22.