Magdalena Łach

Magdalena Łach AX senior developer

Temat: Pewien problem bazodanowy - PostgreSQL + JAVA ( Hibernate)

Rafał Wardas:
Witam.
Magdalena Łach:

jezeli user jest w grupie i jest zbanowany, to status = -1/B.
A nie przypadkiem = 1/B ?

B jest w przypadku char-a, -1 jest oznaczeniem w przypadku int-a.
wiec po mojemu;) wartosci < 0 wskazuja ze dostep jest zakazany,
powody mozna mnozyc;) wartosci > 0 moga okreslac typ praw dostepu. a 0 ze podanie zlozone. jak nie ma rekordu to sie nie interesujemy - i tyle;)
w tym rozwiazaniu mozna dodatkowo wprowadzac nowe "statusy"
- np admina na grupe
Jest jakiś sensowny zysk wynikający z takiego scalenia?

oprocz tego, ze bardzo zlosliwy osobnik, ktory powie ze trzeba dolozyc nowy typ usera lub nowy typ dostepu do grupy (:D, pozdrowienia:) nie spowoduje calkowitej reorganizacji calego kodu (dodawanie kolenych kolumn)- w najgorszym wypadku doda sie nowa tabele, gdzie beda szczegolowe informacje o danym statusie/typie dostepu (vivat normalizacja:)

Marek:
Ja bym tabele użytkownika rozbił na dwie. Jedna z podstawowymi
informacjami do złączenia a druga z danymi adresowymi, telefonami, hasłem etc.
a ja bym sprawdzila najpierw czy jest to konieczne - w zaleznosci
ile pol zawiera ta tabela i czy konieczne jest tworzenie relacji
jeden do jeden...

ps. jak sie za bardzo zagalopuje, to mi powiedzcie;)Magdalena Łach edytował(a) ten post dnia 21.11.08 o godzinie 08:30

konto usunięte

Temat: Pewien problem bazodanowy - PostgreSQL + JAVA ( Hibernate)

Marcin Kossak:
brak informacji o kierunku, wydziale, uczelni studenta bo takie powinny być wnioskując z tego co podałeś ;)

nie są konieczne bo to wyciągnie się z połączenia z grupami do których należeć będzie uzytkownik.
Marcin K.

Marcin K. Programowanie jest
moim powołaniem,
Alleluja

Temat: Pewien problem bazodanowy - PostgreSQL + JAVA ( Hibernate)

Magdo nie powiem iż Twój sposób jest zły, spoglądając na oszczędności w bazie, lepiej jest to zrobić na wartościach bitowych 0/1 wtedy używamy tylko 1 bitu na rekord, a w przypadku int oraz char jest to o wiele więcej.
int/int4 - signed four-byte integer
char - fixed-length character string

lepiej wtedy użyć:
bit - fixed-length bit string
boolean - logical Boolean (true/false)

Jak sobie przekalkulujemy to zysk miejsca jest znaczący np przy 40 tys studentów.
Warto już teraz pomyśleć o optymalizacji bazy, bo koszt poprawiania jest o wiele wyższy.

Potem wyjdzie iż baza po roku ma jakieś 100MB, a mogłaby mieć kilka.Marcin Kossak edytował(a) ten post dnia 21.11.08 o godzinie 13:42
Magdalena Łach

Magdalena Łach AX senior developer

Temat: Pewien problem bazodanowy - PostgreSQL + JAVA ( Hibernate)

Marcin Kossak:
Magdo nie powiem iż Twój sposób jest zły, spoglądając na oszczędności w bazie, lepiej jest to zrobić na wartościach bitowych 0/1 wtedy używamy tylko 1 bitu na rekord, a w przypadku int oraz char jest to o wiele więcej. [ciach]

oki, zgadzam sie z Toba... masz racje w 100%, jezeli tylko najwazniejsza dla nas jest oszczednosc miejsca... (a 100MB to wcale nie tak duzo;)

jezeli musimy wziac pod uwage jak zmiane zalozen systemu np na tydzien przed oddaniem (:D znowu pozdrowienia:), ew rozszerzanie systemu, trzeba zaprojektowac baze w taki sposob, zeby maksymalnie zmniejszyc koniecznosc dodawania nowych kolumn... np.:admin, mlodszy_admin, ban, nowy, podanie, tylko_czyta, specjalny, wykladowca itp...:) komplikuje sie dosc mocno wszystko, trzeba zmieniac zapytania... wtedy lepiej jest mic jakies id praw dostepu, tabelke obok i sie joinowac...

jezeli projekt jest jednorazowy, tzn zaplanowac, zakodowac, zainkasowac, zapomniec, to nie ma sensu sie bawic z planowaniem pod ew rozszerzenia, tylko pisac najprosciej jak sie da:)

no dobra, chyba sie zagalopowalam;)

konto usunięte

Temat: Pewien problem bazodanowy - PostgreSQL + JAVA ( Hibernate)

potrzebuję 3 stopni admina : god admin, gropu admin, moderator ( dla konkretnej grupy obydwaj)
Marcin K.

Marcin K. Programowanie jest
moim powołaniem,
Alleluja

Temat: Pewien problem bazodanowy - PostgreSQL + JAVA ( Hibernate)

Ogólnie to każdy ma już wyrobiony swój sposób Tworzenia/organizacji bazy danych.

Rozpotruje się 2 główne rozwiązania, które są najczęściej używane.

1. sposób
tabela z prawami dostępu
- jedna kolumna na jedno zachowanie(upoważnienie w systemie)
tabela z uzytkownikami z dodatkowym kluczem FK do w/w tabeli.

np
tabela uzytkownik pola (id_osoby,id_uprawnienia, itp...)
tabela uprawnienia pola (id_uprawnienia, czyta_wszystkie_grupy,czyta_swoja_grupe,dodaje_posty, itp....)

ale w tym wypadku każda nowa funkcja oznacza nową kolumnę w tabeli, a ich ilość jest ograniczona. Nie chciałbym skłamać, ale chyba jest to 1024 dla postgres`a. Jeśli jest inaczej prosze mnie poprawić. Swoją drogą MySQL 4 miał tylko 256 ;)

2. sposób
tabela z nazwą grupy prawa
tabela z konkretnym upoważnieniem do systemu
tabela powiazania między w/w tabelami, która powiazuje 2 klucze pimary w tablicy asocjacyjnej w modelu konceptualnym.

to rozwiązanie jest bardziej korzystne jeśli funkcji w systemie jest bardzo dużo. Ma ono swoje zalety, ale zabiera więcej miejsca w samej bazie, bo tabela z powiazaniami sie rozrasta przy dużej ilości tworzonych grup w systemie jak i dużej ilości funkcji. Samo pytanie do bazy danych jest bardziej rozrośnięte.

W najgorszym przypadku jest to iloczyn kartezjański 2 tabel.

To są tylko jedne w wielu rozwiązań z tym, że najczęściej używane. Informacji na ten temat jest bardzo dużo w internecie, z tym że prawie 99% po angielsku, ale to chyba problem nie jest ;)

Liczę także na ciekawe rozwiązania przedstawione przez innych uczestników tematu.

Magdo teraz możesz się zagalopować ;)Marcin Kossak edytował(a) ten post dnia 22.11.08 o godzinie 07:01
Magdalena Łach

Magdalena Łach AX senior developer

Temat: Pewien problem bazodanowy - PostgreSQL + JAVA ( Hibernate)

Marek Urbanowicz:
potrzebuję 3 stopni admina : god admin, gropu admin, moderator
( dla konkretnej grupy obydwaj)
]:) no to albo 3 dodatkowe kolumny Y/N, albo odpowiednie ID-ki (flagi) w kolumnie status... reszta w javie... Twoj wybor:)
Marcin Kossak:
Ogólnie to każdy ma już wyrobiony swój sposób Tworzenia/organizacji bazy danych.
ktory sie zmienia przy zmianie pracy:P
Liczę także na ciekawe rozwiązania przedstawione przez innych uczestników tematu.
Ty?? a kto jest autorem tematu?:P
Magdo teraz możesz się zagalopować ;)

juz sie robi:) Ty przedstawiasz sposob implementacji dostepu do konkretnych czesci systemu (chyba ze sie myle, bo to bardzo ksiazkowe jest). Wg mnie, w bazie powinny byc konkretne typy/poziomy dostepu, a ich szczegoly (czy sie pojawi ten i ten button na tej czy na tamtej stronie) lepiej jest zrobic poza baza... Czyli: w bazie przechowujesz kto jest kim w systemie (i czy przypadkiem nie dostal bana itp) a reszte oprogramowuje sie wyzej...

Następna dyskusja:

[postgresql] Problem z inde...




Wyślij zaproszenie do