«Я получаю сообщение об ошибке, говоря, что в окне« Переработчик »адаптер не подключен».
recyclerView.setAdapter (madapter);
Счет я думаю я отчасти, отбросил Вас, примечания находятся только в другой таблице и существует отдельная таблица с примечаниями, отправленными различными людьми. Сообщения имеют примечания и теги, но теги также имеют примечания, который является, почему теги УНИКАЛЬНЫ.
Jonathan прав относительно связанных списков, я, привычка использует их вообще. Я решил реализовать теги самым простым нормализованным способом который суть мои потребности:
DROP TABLE IF EXISTS `tags`;
CREATE TABLE IF NOT EXISTS `tags` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`owner` int(10) unsigned NOT NULL,
`date` int(10) unsigned NOT NULL,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
DROP TABLE IF EXISTS `posts`;
CREATE TABLE IF NOT EXISTS `posts` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`owner` int(10) unsigned NOT NULL,
`date` int(10) unsigned NOT NULL,
`name` varchar(255) NOT NULL,
`content` TEXT NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
DROP TABLE IF EXISTS `posts_notes`;
CREATE TABLE IF NOT EXISTS `posts_notes` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`owner` int(10) unsigned NOT NULL,
`date` int(10) unsigned NOT NULL,
`postId` int(10) unsigned NOT NULL,
`note` TEXT NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (`postId`) REFERENCES posts(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
DROP TABLE IF EXISTS `posts_tags`;
CREATE TABLE IF NOT EXISTS `posts_tags` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`owner` int(10) unsigned NOT NULL,
`tagId` int(10) unsigned NOT NULL,
`postId` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (`postId`) REFERENCES posts(`id`) ON DELETE CASCADE,
FOREIGN KEY (`tagId`) REFERENCES tags(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Я не уверен, как быстро это будет в будущем, но оно должно быть прекрасным некоторое время, поскольку только пара людей использует базу данных.
Вот то, как я сделал бы это:
posts: [postId], content, ownerId, date, noteId, noteType='post'
tag_assoc: [postId, tagName], ownerId, date, noteId, noteType='tagAssoc'
tags: [tagName], ownerId, date, noteId, noteType='tag'
notes: [noteId, noteType], ownerId, date, content
Поля в квадратных скобках являются первичным ключом соответствующей таблицы.
Определите ограничение на noteType
в каждой таблице: posts
, tag_assoc
, и tags
. Это препятствует тому, чтобы данное указание относилось к обоим a post
и a tag
, например.
Сохраните имена тега как короткую строку, не целое число id
. Тем путем можно использовать закрывающий индекс [postId
, tagName
] в tag_assoc
таблица.
Выполнение завершения тега сделано с вызовом Ajax. Если пользователь вводит "datab" для тега, Ваша веб-страница выполняет вызов Ajax и на стороне сервера, запросах приложения: SELECT tagName FROM tags WHERE tagName LIKE ?||'%'
.
Связанный список является почти наверняка неправильным подходом. Это, конечно, означает, что Ваши запросы будут или сложными или субоптимальными - который нелеп, так как наиболее вероятная причина использования связанного списка состоит в том, чтобы сохранить данные в корректном отсортированном порядке. Однако я не вижу простой способ постараться не многократно выбирать строку и затем использовать значение броска, полученное для создания условий избранной операции для следующей строки.
Так, используйте основанный на таблице подход с нормальным внешним ключом к ссылкам первичного ключа. Тот, обрисованный в общих чертах Bill Karwin, выглядит подобным тому, что я обрисовал бы в общих чертах.
"Тег почти похож на само сообщение, потому что люди могут отправить примечания о теге". - эта фраза заставляет меня думать, что Вы действительно просто хотите одну таблицу для POST с первичным ключом и внешним ключом, который ссылается на таблицу POST. Теперь у Вас может быть столько тегов для каждого сообщения, сколько Ваше дисковое пространство позволит.
Я предполагаю, что нет никакой потребности во многих многим между POST и тегами, потому что тег не совместно используется через сообщения, на основе этого:
"Пользователи могут создать теги, которые имеют примечания, созданная дата, владелец, и т.д.".
Если бы дата создания и владелец совместно используются, это были бы два дополнительных отношения внешнего ключа, IMO.