Во-первых, NoSQL - это просто модное слово, которое охватывает множество различных типов баз данных, таких как хранилища значений ключей, хранилища документов, графовые базы данных, ... См. http://nosql -database.org / для список разных типов и реализаций. Некоторые из этих систем также имеют транзакционные гарантии, например, для вашего случая, что сообщение полностью записано в базу данных.
Теперь я сосредоточусь на хранилищах значений ключей, поскольку они кажутся очень заметным экземпляром NoSQL.
Относительно вашего первого вопроса: вы правы, вы бы не использовали строгие отношения, как внешний ключ в СУБД, но вы бы просто сохранили список тегов, связанных с экземпляром записи:
| pid | title | tags
| 1 | foo | sql, rdbms
| 2 | bar | sql, acid
...
Для запроса по тегу у вас есть так называемый Инвертированный индекс (http://en.wikipedia.org/wiki/Inverted_index), который дает вам все идентификаторы документов для одного тега:
| tag | pids
| sql | 1, 2
| rdbms | 1
| acid | 2
Это позволяет довольно легко вести подсчет сообщений.
Обновление имен тегов на самом деле не так сложно, если у вас есть доступ к вашим данным на основе сокращения карты, то вы можете, например, обновите тег 'Sql' до 'SQL' с помощью простого задания (псевдокод):
map: IF post.tag contains('Sql') THEN emit(post)
reduce: in post.tag: replace('Sql' by 'SQL')
write(post)
Но я не думаю, что переименование тегов - обычное дело. Проблема с длительным временем обработки и несогласованностью сформулирована Брюером в CAP-теореме (http://en.wikipedia.org/wiki/CAP_theorem), которая в основном говорит о том, что вы не можете иметь согласованность, доступность и допуск на разделы одновременно, и вам приходится торговать по крайней мере, один для двух других. В вашем случае: если вы хотите иметь постоянное обновление тега (например, нельзя прочитать два документа, где у одного есть тег 'Sql', а у другого уже есть 'SQL), вам пришлось заблокировать таблицу для других читатели, и, следовательно, у вас не будет доступности.
Заключительная мысль: если вы хотите создать высокодоступную, хорошую платформу для масштабирования, вам не нужно слишком много думать о взаимоотношениях.