Масштабируемая схема меток базы данных

«Я получаю сообщение об ошибке, говоря, что в окне« Переработчик »адаптер не подключен».

recyclerView.setAdapter (madapter);

6
задан Community 23 May 2017 в 12:19
поделиться

4 ответа

Счет я думаю я отчасти, отбросил Вас, примечания находятся только в другой таблице и существует отдельная таблица с примечаниями, отправленными различными людьми. Сообщения имеют примечания и теги, но теги также имеют примечания, который является, почему теги УНИКАЛЬНЫ.

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 ;

Я не уверен, как быстро это будет в будущем, но оно должно быть прекрасным некоторое время, поскольку только пара людей использует базу данных.

0
ответ дан 17 December 2019 в 20:35
поделиться

Вот то, как я сделал бы это:

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 ?||'%'.

2
ответ дан 17 December 2019 в 20:35
поделиться

Связанный список является почти наверняка неправильным подходом. Это, конечно, означает, что Ваши запросы будут или сложными или субоптимальными - который нелеп, так как наиболее вероятная причина использования связанного списка состоит в том, чтобы сохранить данные в корректном отсортированном порядке. Однако я не вижу простой способ постараться не многократно выбирать строку и затем использовать значение броска, полученное для создания условий избранной операции для следующей строки.

Так, используйте основанный на таблице подход с нормальным внешним ключом к ссылкам первичного ключа. Тот, обрисованный в общих чертах Bill Karwin, выглядит подобным тому, что я обрисовал бы в общих чертах.

0
ответ дан 17 December 2019 в 20:35
поделиться

"Тег почти похож на само сообщение, потому что люди могут отправить примечания о теге". - эта фраза заставляет меня думать, что Вы действительно просто хотите одну таблицу для POST с первичным ключом и внешним ключом, который ссылается на таблицу POST. Теперь у Вас может быть столько тегов для каждого сообщения, сколько Ваше дисковое пространство позволит.

Я предполагаю, что нет никакой потребности во многих многим между POST и тегами, потому что тег не совместно используется через сообщения, на основе этого:

"Пользователи могут создать теги, которые имеют примечания, созданная дата, владелец, и т.д.".

Если бы дата создания и владелец совместно используются, это были бы два дополнительных отношения внешнего ключа, IMO.

0
ответ дан 17 December 2019 в 20:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: