Убедитесь, что макет ограничения обновлен до последней версии:
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
И замените имена своих тегов xml
<androidx.constraintlayout.ConstraintLayout>
на
<androidx.constraintlayout.widget.ConstraintLayout>
в каждом месте где он появляется с помощью этого ярлыка:
Windows: CTRL kbd> + SHIFT kbd> + R kbd>
Mac: < kbd> КОМАНДА kbd> + SHIFT kbd> + R kbd>
Вложенные наборы
лучше для производительности, если вам не нужны частые обновления или иерархическое упорядочение.
Если вам нужны обновления дерева или иерархическое упорядочение, лучше использовать модель данных родитель-потомок
.
Ее легко построить в Oracle
и SQL Server 2005+
, и не так просто (но все же возможно) в MySQL
.
Я бы использовал алгоритм модифицированного обхода дерева предварительного порядка, MPTT, для такого рода иерархических данных. Это обеспечивает высокую производительность при обходе дерева и поиске дочерних элементов, если вы не возражаете против небольшого штрафа за изменения в структуре.
К счастью, в Django есть отличная библиотека для этого, django-mptt ]. Я успешно использовал это в ряде проектов. Также существует django-treebeard , который предлагает несколько альтернативных алгоритмов, но я его не использовал (и в любом случае он не такой популярный, как mptt).
Согласно этим статьям:
http://explainextended.com/2009/09/24/adjacency-list-vs-nested-sets-postgresql/ http://explainextended.com/2009/ 09/29 / adjacency-list-vs-nested-sets-mysql /
"MySQL - единственная система из большой четверки (MySQL, Oracle, SQL Server, PostgreSQL), для которой модель вложенных множеств показывает приличную производительность и может считаться хранимыми иерархическими данными »