2010-09-14 2 views
1

Есть ли существующая реализация или даже имя для базы данных типа, которая позволяет несколько точек зрения? Я имею в виду, например, если один пользователь изменяет заголовок статьи, то это изменение будет видимо только для этого конкретного пользователя, и все остальные будут видеть исходный заголовок. Если несколько пользователей меняют его на один и тот же новый заголовок, новый заголовок становится «основным видом» или «нефильтрованным представлением» базы данных, инициированным либо базой данных, либо из приложения.База данных, которую каждый пользователь видит по-разному - база данных «многопользовательская»/«многопользовательская»?

Я кодируюсь на C# и знаком с SQL и начинаю с MongoDB, но вопрос о концепции и существуют ли абстракции, реализации или шаблоны проектирования.

ответ

0

Если ваша «точка зрения» полностью разделена, вы можете просто использовать новую базу данных для каждого пользователя.

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

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

Одним из решений может быть использование идентификатора (статьи) и идентификатора пользователя в качестве ключа для ваших таблиц. Таким образом, вы можете полностью заменить контент для определенных пользователей. Предположим, вы хотите найти статью 123, как видно пользователю 456, или если этот пользователь не редактировал ее, как видно пользователю 789, или если , что пользователь не редактировал его, просто выберите любую версию :

SELECT * FROM articles WHERE id = 123 ORDER BY user_id = 456 DESC, user_id = 789 DESC LIMIT 1 
+0

Это тривиальное решение для изменений UPDATE, но когда вы начинаете рассматривать DELETE и конфликты в представлениях, которые они могут создать, он начинает становиться не столь тривиальным. Я могу смоделировать мою базу данных для обработки всех сложностей с несколькими точками зрения, но она будет весьма специфичной для приложения, и мне было интересно, существует ли уже существующая CRUD-абстракция модели данных с несколькими точками зрения. Другими словами, кто-то уже решил общую проблему? –

+0

«конфликты в взглядах» - это в значительной степени то, чего вы пытаетесь достичь. Возможно, вам захочется взглянуть на неизменяемые структуры данных, используемые в функциональных языках, таких как Haskell. – geon

+0

конфликты будут возникать в операциях, например, если пользователь удаляет статью, а другой ее переименовывает, то операция переименования может быть применена только к пользователю2 и к главному виду, но не к пользователю 1. –

Смежные вопросы