2009-06-03 11 views
5

Rozważania nad najlepszym sposobem przechowywania zestawu danych "na żywo" i zestawu danych w bazie danych. Wersja na żywo jest wyświetlana na stronie internetowej, a wersja robocza jest przygotowywana do momentu, aż będzie gotowa do uruchomienia. Model jest relacyjny i składa się z wielu tabel.Model bazy danych dla danych Live i Draft

Moja obecna metoda polega na posiadaniu 2 baz danych, jednej dla wersji roboczej i drugiej dla wersji na żywo. Gdy promujesz dane na żywo, SQL po prostu kopiuje dane z wersji roboczej db do żywej bazy danych.

To jest w porządku, ale trochę powolne i wydaje się nieporządne. I często SQL musi brać pod uwagę oba zestawy tabel.

Innym sposobem byłoby uczynienie wskaźnika Live jako częścią klucza każdej tabeli, dzięki czemu mogę przechowywać zarówno na żywo, jak i wersję roboczą w tej samej tabeli - i aktualizować wskaźnik, aby dane były aktywne. - Nie jestem tak naprawdę sprzedany na ten pomysł.

  • DBMS to Sybase.

Byłbym wdzięczny, gdyby ktoś miał jakiekolwiek inne sugestie.

U.M.

+0

Dzięki za odpowiedzi do tej pory. Dali mi trochę więcej pomysłów. - Muszę się upewnić, że dane robocze nie są wyświetlane przez przypadek. - Mając flagę i ustawiając ją w rzędach roboczych, aby stały się aktywne .... Mógłbym również oznaczyć stary wiersz bieżący "nieaktualny", a aplikacja wycięliby "na żywo" i zapisywali do wersji roboczej, jeśli są jakieś zmiany. W ten sposób unikam dużego usuwania, gdy dane zostaną oznaczone jako aktywne. – sqlchan

Odpowiedz

2

jednej tabeli

DataTable 
    DataKey 
    DataMode 
    Data... 

PK DataKey + DataMode
weryfikatora: DataMode IN ('L', 'D') --live lub projekt

najpierw włożyć w DataMode = "D" - draft
po uruchomieniu skopiuj go do tej samej tabeli za pomocą INSERT SELECT, ustaw DataMode = 'L'
zawsze edytuj DataMode = 'D' i wciśnij go do DataMode = 'L "kiedy to zrobimy.

gdy chcesz pokazać przekazywanie danych w trybie użyj GDZIE DataKey = @ X i DataMode = @ trybie

Nie jestem pewien, jak będziesz obsługiwać Usuwa (projekt usunąć, a następnie wcisnąć, że aby żyć ?), może chcesz dodać kolumnę Status:

DataStatus --'A'ctive 'D'eleted 

robi to w jednej tabeli pozwala na wspólne korzystanie z wszystkich sql pracować dla obu ive „L” lub „D'tratwie

0

myślę. jest to główny kandydat do efektywnego datowania, dodaj datę początkową i końcową do każdego stołu pl daty rozpoczęcia i zakończenia lub po dacie rozpoczęcia i końcu jest NULL rekord jest na żywo. Cała reszta nie jest wyświetlana jako na żywo, dzięki czemu możesz mieć swoje dane robocze.

Pozwoliłoby to na więcej niż jeden zestaw danych roboczych, jeśli dane są sekwencyjne i historia poprzednich wartości zostanie zachowana. Lub jeśli woluminów danych jest problem, mieć zadanie, które działa w czasach niskiego obciążenia bazy danych DB, aby usunąć dowolny rekord z końcowej daty mniej niż aktualna data.

1

Dwie koncepcje, w zależności od okoliczności.

Jeśli niektóre dane pozostaną aktualne po włączeniu wersji roboczej, a chcesz tylko, aby nowe dane były skuteczne wszystkie naraz, możesz mieć numer wersji dla każdego elementu danych i opcję konfiguracji dla bieżącego aktywnego numeru wersji .Następnie zapisz logikę, aby wybrane rekordy miały numery wersji < = Bieżący numer wersji (ignorowanie wyższych numerów wersji). Może to oznaczać niskie zakłócenia i być może poradzić sobie z tym, co masz na myśli, wymagając obu dostępnych wersji.

Jeśli chcesz zamienić całe tabele i możesz odłączyć (bardzo) na krótko rzeczy, zmień nazwy tabel. Prawdopodobnie mniej zakłócające niż opcje, które opisujesz, a także umożliwia równoczesny dostęp.

0

Dodać klucz cokolwiek już używasz i logiczną is_live kolumnę domyślnie N. Gdy chcesz opublikować, wystarczy zaktualizować tę kolumnę do Y.

Mając to praca zmusi Cię do dokonania przeglądu wszystkich zapytań tak, że odfiltrowują projekty, gdy nie powinny być widoczne, ale zaoszczędzą ci konieczności utrzymywania dwóch równoległych tabel o tych samych formatach i tym podobnych.

Powiązane problemy