Название: бд связь один ко многим Отправлено: demaker от Август 20, 2016, 12:06 Никогда не писал ПО для БД. Надо написать клиента для БД.
Читал доки по QtSql но так и не понял как реализовать связь "один ко многим". Есть класс QSqlRelationTableModel с помощью которого можно реализовать связь "один к одному". Не могли бы вы привести пример реализации или наставить на путь истинный. Название: Re: бд связь один ко многим Отправлено: break от Сентябрь 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 и т.д. Мне пришлось для таких целей писать свою модель. |