Przechowywanie wartości domyślnych w tabeli

0

Witam,

Zastanawiam się jaki jest najlepszy sposób na przechowywanie wartości domyślnych dla pól które są predefiniowane ale z możliwością edycji.

Przykładowo po instalacji w tabeli mamy kilka wierszy wypełnionych domyślnymi wartościami. Użytkownik ma możliwość zmienić te wartości ale w każdej chwili może też przywrócić domyślne wartości.

Najprostszym rozwiązaniem jest trzymanie wartości domyślnych w osobnych kolumnach. W postgresql, którego używam, jest typ hstore, jest to dobry pomysł by trzymać wszystkie domyślne w jednym polu jako pary <nazwa_kolumny - wartość>? Czy lepiej sobie dać spokój z takimi kombinacjami?

0

A nie możesz zdefiniować rozszerzalnych słowników po prostu i FK do nich?

0

Widzę 2 opcje:

  1. znasz domyślną wartość, wówczas sprawa prosta -> update tabelka set kolumna=wartoscDomyslne where ...
  2. nie znasz tej wartości i przed przywróceniem potrzebujesz ją skądć zaczytać, np. z postgresowego katalogu: update tabelka set twojaKolumna=(select column_default from information_schema.columns where table_name='tabelka' and column_name='twojakolumna') where ...

https://www.postgresql.org/docs/9.1/static/infoschema-columns.html

0

@yarel Źle mnie zrozumiałeś, nie chodzi o właściwość DEFAULT dla kolumny (kwerka którą podałeś pozwala na odczyt właściwości kolumn włączając default która jest dla całej kolumny) ale o dane i ich wartości domyślne.

Przykładowo, mamy tabelę "obiekty" w której domyślnie wrzucamy kilka wierszy, będą to systemowe wartości:

Nazwa Szerokość Wysokość Długość
stół 120 110 160
krzesło 40 130 50

Użytkownik może zmienić wartości ale domyślne muszą być gdzieś przechowywane by móc przywrócić:

Nazwa Szerokość Wysokość Długość Szerokość_dom Wysokość_dom Długość_dom
stół 130 110 150 120 110 160
krzesło 45 135 55 40 130 50

Albo wersja powyższa z dodatkowymi kolumnami, albo w jednym polu hstore jako pary key = value:

Nazwa Szerokość Wysokość Długość Domyślne (hstore, przechowywane jako text)
stół 120 110 160 "Szerokość" => "120", "Wysokość" => "110", "Długość" => "160"
krzesło 40 130 50 "Szerokość" => "40", "Wysokość" => "130", "Długość" => "50"

@kate87 Rozszerzalne słowniki? To może być też sposób, możesz rozwinąć w jaki sposób implementujesz je?

0

Zwykly słownik ale z opcja Update. Wpisujesz wartości które znasz do tabeli a jesli jakiejs wartości nie ma w tabeli to user ma plusik i tam w formatce moze mu się pojawić pole w które wpisze swoja wartość. W formatce if jesli pole o tym id nie jest null to Update słownika i wpis do tabeli. Jedniczesnie w formatce wpisujesz w polu przez js defaultowa wartość i jeśli wbpolu pozostala wartość defaultowa to insert do tabeli.

1
yabolik napisał(a):

Najprostszym rozwiązaniem jest trzymanie wartości domyślnych w osobnych kolumnach. W postgresql, którego używam, jest typ hstore, jest to dobry pomysł by trzymać wszystkie domyślne w jednym polu jako pary <nazwa_kolumny - wartość>? Czy lepiej sobie dać spokój z takimi kombinacjami?

A jaki masz powòd, żeby kombinować zamiast użyć najprostszego rozwiązania?

0

Najprostsze wychodzi że najlepsze ale dobrze czasem porównać inne alternatywne rozwiązania, zawsze można poznać przez to coś nowego :)

0

@yabolik: Ok, już jasne. Osobiście zastanowiłbym się czy wybierać typ danych, który nie jest dostępny w innych silnikach bazodanowych. Jeśli kolumn "domyślnych" jest mało, to pewnie najprościej byłoby mieć pary: atrybut, atrybut_domyślny.

Idąc w tego hstore, dlaczego atrybuty zmienione przez użytkownika chcesz przechowywać na osobnych kolumnach, a te domyślne jako hstore? To nie jest niekonsekwencja?

1 użytkowników online, w tym zalogowanych: 0, gości: 1