2013-03-14 7 views
10

Po przeczytaniu wielu pytań dotyczących SO na temat Keeping page changes history lub How to version control a record in a database (na przykład), nie mogę znaleźć prawdziwego eleganckiego rozwiązania do wykonania pracy.Jak stworzyć system wersjonowania/historii/recenzji treści publikowanych przez użytkowników?

Teraz spróbujmy wyjaśnić jak najdalej co musimy, dla tego prostego systemu rewizyjnej, która pozwala zarejestrowanym użytkownikom pisać kilka artykułów i innych użytkowników, aby przedstawić zmiany tych artykułów, a następnie kilka moderatorów użytkowników, aby sprawdzić te poprawki.

bazy danych MySQL

Baza danych zawiera tabelę artykuły z następujących dziedzin uproszczonej:

ARTICLE(id, id_user, title, content, date); 

wdrożyć wersje rewizji/historii, myślę, że będziemy musieli się z poniższą tabelą:

REVISION(id, id_article, revision_id_user, id_moderator, revision_date, 
     revision_title, revision_content, revision_description, revision_check); 

z relacji: ARTICLE 0,n <---> 1,1 REVISION

Workflow

  • Użytkownik utworzyć ARTICLE, w którym jest umieszczona w ARTICLE tabeli (Wspaniale!)

  • Inny użytkownik dokonuje aktualizacji tego ARTICLE ta aktualizacja jest rejestrowana w tabeli REVISION i jest w kolejce do użytkowników moderatora. (revision_check=0).

  • Użytkownik moderatora sprawdza poprawność REVISION(revision_check=1), a następnie ARTICLE(content) otrzymuje wartość REVISION(revision_content).

Moje pytania

  • Czy ten przepływ pracy wydaje się być dobrym sposobem, aby to zrobić? Bo widzę błąd: jeśli istnieje kilka REVISION s dla ARTICLE:

    • Jeżeli weźmiemy pod uwagę treść ostatni zgłosił REVISION lub oryginalny ARTICLE?
    • A może powinniśmy zablokować poprawki, ponieważ żaden inny REVISION nie może zostać przesłany, a ostatni nie jest sprawdzany.
  • Czy istnieje sposób rejestrowania wersji światła? Przy okazji, czy możliwe jest wstawienie do tabeli REVISION tylko zaktualizowanej treści za pomocą funkcji porównania SQL, PHP lub js? I jak wyświetlić to tak: Zrób to? Bo obawiam się, że stół REVISION będzie bardzo ciężki.

  • Premia: w jaki sposób SO?

Każdy pomysł, link, źródło, wtyczki (MySQL, PHP 5 i JS/jQuery) byłoby bardzo appriciated.

Odpowiedz

7

Nie widzę jednej odpowiedzi z wtyczką do Twojego pytania, ze względu na spersonalizowany przepływ pracy.

o przepływie rewizyjnej

Jest własną wizję tego, to nie wydaje się zbyt złe do użytku. Ale jestem pewien, że niektóre przypadki użycia powinny ewoluować przy okazji.

Po pierwsze, widzę, że należy zablokować poprawki do czasu aktualizacji i dopóki nie zostanie zatwierdzona przez moderatora. Gdy jest w toku, dodaj na przykład ARTICLE(revision=progress), aby go zablokować, i unikaj edycji artykułu przez jednoczesne wyświetlenie komunikatu.

Po drugie, uważaj, uważam, że autor artykułu mógł go zaktualizować bez żadnego procesu moderacji. Z tego powodu musisz ustawić także ARTICLE(revision=progress), podczas gdy autor aktualizuje swój własny artykuł.

O nagrywaniu lekką wersję wersjami w db

Można zrobić szaloną funkcję w php (lub inne), która tworzy tablicę, dla każdej zmiany, podobnie jak następujące:

array('1'=>array('char_pos'=>'250','type'=>'delete','length'=>'25','change'=>''), 
'2'=>array('char_pos'=>'450','type'=>'insert','length'=>'16','change'=>'some text change'), 
...); 

Jak widać, tworzenie, formatowanie i zapisywanie tego w bazie danych może być bardzo trudne i trudne w zarządzaniu.

Myślę, że nie ma sposobu, aby wykonać wersjonowanie z MySQL. Możesz zrobić coś dla wersji z ORMem takim jak PROPEL, ale nie sądzę, że wynik będzie taki, jakiego oczekujesz ...

Tutaj wydaje się, że lepszy sposób zapisuje cały zaktualizowany artykuł dla każdej wersji, nawet jeśli rośnie twoja baza danych. Przy twoim przepływie pracy nie będziesz dużo czytał tabeli REVISION, więc MySQL nie będzie dla niej dużym obciążeniem.

O wyświetlaczu porównania

można użyć Diff-Match-Patch plugin do hilight aktualizacje pomiędzy dwoma treści, "differences" demo here. Myślę, że SO używa Beyond compare (lub podobnego) do hilight zmian między wersjami.

Aby dowiedzieć się więcej o technologiach SO, można zapoznać się z this page.

+0

+1 Dziękuję bardzo za porady i linki. Czekam na punkty widzenia innych członków, a jeśli nie, sprawdzę twoją odpowiedź. – Valky

Powiązane problemy