В моей базе данных есть 7 таблиц: один из них - родительский (кормовой), а третий - это дети (общедоступные каналы, частные каналы, созданные каналы) отношения isA. В таблице каналов есть таблица «Подписки» с внешним ключом. Каждый пользователь может подписаться на канал любого типа. Проблема в том, что представление для каждого типа фида отличается, это означает, что мне нужно создавать разные ссылки для каждого подписанного канала. В рамках текущей схемы мне нужно выполнить 3 запроса, чтобы получить тип фида из идентификатора фида. Есть ли лучшее решение этой проблемы?Восстановление типов с помощью отношений с Исой
0
A
ответ
0
Вы можете использовать представление для предварительного присоединения детей к родителям и получения согласованного результата независимо от типа дочернего элемента. Например:
create view feed_links as
select f.feed_name
, case f.feed_type
when 'public' then pub.x + pub.y
when 'private' then pri.z
when 'generated' then gen.v + gen.w
end as link
from feeds f
left outer join public_feeds pub on pub.feed_id = f.feed_id
left outer join private_feeds pri on pri.feed_id = f.feed_id
left outer join generated_feeds gen on gen.feed_id = f.feed_id
where ...;
Или, если ваша таблица кормов не имеет столбец feed_type (или эквивалент):
create view feed_links as
select f.feed_name
, case when pub.feed_id is not null then pub.x + pub.y
when pri.feed_id is not null then pri.z
when gen.feed_id is not null then gen.v + gen.w
end as link
from feeds f
left outer join public_feeds pub on pub.feed_id = f.feed_id
left outer join private_feeds pri on pri.feed_id = f.feed_id
left outer join generated_feeds gen on gen.feed_id = f.feed_id
where ...;
+0
Привет, спасибо за ответ. Однако я не получил его, так как в родительской таблице нет поля feed_type. –
+0
См. Обновленный ответ –
Смежные вопросы
- 1. Восстановление таблицы с помощью стр: подпорки восстановление
- 2. Восстановление покупок с помощью codeenameone
- 3. Восстановление фрагмента с помощью FragmentPagerAdapter
- 4. Подсчет типов отношений в таблице
- 5. neo4j определение нескольких типов для отношений
- 6. Восстановление наследования каталога Windows с помощью Java с помощью JNA
- 7. Как вернуть количество нескольких типов отношений с одним запросом?
- 8. Neo4J - Предотвращение дублированных типов отношений с идентичным значением
- 9. Список заполнения с помощью типов
- 10. Преобразование типов с помощью Generics
- 11. Преобразование типов с помощью numeric_std
- 12. несоответствие типов с помощью BeanUtils.copyProperties
- 13. Сравнение типов с помощью отражения
- 14. Восстановление изображения в phonegap с помощью jquery
- 15. Восстановление HTML в браузере с помощью JSoup
- 16. Восстановление базы данных PostgreSQL с помощью Java
- 17. Восстановление Firebird 2.5 с помощью fbsvcmgr
- 18. Восстановление пароля Wifi с помощью Python
- 19. Восстановление с помощью ограничения ограничений в Swift
- 20. Восстановление пароля для Android с помощью google
- 21. Восстановление базы данных с помощью vb.net
- 22. восстановление с помощью mysqldump, но где данные?
- 23. Сохранение и восстановление с помощью Bundle
- 24. Резервное копирование и восстановление с помощью VirtualBox
- 25. Восстановление моего волнового файла с помощью структуры
- 26. Восстановление закрытой веб-страницы с помощью jQuery
- 27. Декодирование и восстановление приложения с помощью Smali
- 28. Восстановление пароля с помощью FOS User bundle
- 29. Восстановление данных MySQL с помощью INNODB
- 30. Восстановление цепи нелинейных коммитов с помощью git
Что дополнительная информация хранится в дочерних таблицах - это звучит для меня, как вы на самом деле не нуждаются в них. Является ли фид открытым или открытым OR? Не могли бы вы упростить ситуацию, указав файл feed_type в таблице родительских кормов и выбросив дочерние таблицы? –
Существуют и другие ограничения, характерные для каждого фида, например, в частных каналах есть пароль и имя пользователя, сгенерированные фиды могут быть связаны с редактором и т. Д. –