![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 566 Pomógł: 35 Dołączył: 21.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witajcie!
Realizując dalej plany rozpocząłem przemyślać tablice uprawnień w CMSie. Jedna kwestia mnie zastanowiła - po co używać 30-40 kolumn w tabeli uprawnień (jak robią wszystkie znane mi CMSy) z polami int (a w nich 0/1) lub set skoro można odowołać się do systemu binarnego? Wiedząc, że zwykły INT w MySQL (jak to wygląda w bazach FireBird, PgSQL i SQLite?) posiada zakres od -2 147 483 647 do +2 147 483 647 mogę zamienić go na system binarny co daje mi 4 294 967 295 możliwych kombinacji. Normlanie uprawnienia to np. logowanie, komentowanie, dostęp do panelu administracyjnego, edycja newsów itd. Zamiast zapisywać to w kilku kolumnach zapiszę to jako ciąg: Kod 1 0 1 1 Oznaczać to może kolejno: możliwość logowania, brak możliwości komentowania, dostęp adm i możliwość edycji newsów. Teraz gdyby zamienić to na system dziesiętny otrzymamy liczbę "11" i taką właśnie zapiszę do bazy danych. Czy taka koncepcja ma sens? Jeśli tak to dlaczego nie widuje się jej w innych projektach? ![]() Nie wiem czy dobrze wykonałem obliczenia ale z tego co patrze cały zakres int daje mi możliwość zapisania 32 uprawnień 0/1. Nie wiem jak wyglądają w innych bazach typy medium int oraz bigint - jest to uniwersalne między MySQL, PgSQL, FireBird oraz SQLite czy to tylko wynalazek MySQLa? Z góry dziękuję za pomoc. p.s. Droga GTW - zróbcie coś z tym wyrzucaniem z sesji bo dłuższego niż 4 linijki postu napisać się nie da normlanie. -------------------- flexiCMS v2 [|||||||+--] 75% done
|
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Pisałem o tym, może ci się przyda:
http://nospor.pl/opcje-dwuwartosciowe-przechowywanie.html -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 444 Pomógł: 79 Dołączył: 26.05.2009 Ostrzeżenie: (0%) ![]() ![]() |
1. 4 294 967 295 = 2^32 - co zrobisz gdy będziesz musiał operować na CRUDzie dla 9 modułów?
2. Operowanie na tak dużych liczbach w php może być problematyczne - zwłaszcza na 32 bitowych systemach 3. Z tego co pamiętam wymienione bazy nie mają indeksów przyspieszających wyszukiwanie bazujące na operacjach bitowych co czyni relacje dość jednostronne w większych zbiorach danych -------------------- |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 566 Pomógł: 35 Dołączył: 21.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
@nospor - rozpisałeś dokładnie to co ja chciałem zrobić
![]() 1. 4 294 967 295 = 2^32 - co zrobisz gdy będziesz musiał operować na CRUDzie dla 9 modułów? 2. Operowanie na tak dużych liczbach w php może być problematyczne - zwłaszcza na 32 bitowych systemach 3. Z tego co pamiętam wymienione bazy nie mają indeksów przyspieszających wyszukiwanie bazujące na operacjach bitowych co czyni relacje dość jednostronne w większych zbiorach danych Użyje np. 4 kolumn ![]() Dodatkowo mogę operować na systemie binarnym jak na tekście - wtedy problem 32 bitowego systemu znika. Rozkładam sobie 01101... na tablicę asocjacyjną funkcją która ma mapę i w rezultacie dostaję: Kod $rights = array() { "user" => array( "login" => int(1), "comments" => int(0) ) "newses" => array( "active" => int(1), "add" => int(1), "delete" => int(1), "others_edit_del" => int(0) ) } I do metody odowłam się np. $_adminPanel->rightTable("newses") co zwróci mi element tablicy $rights. Wtedy dużo wygodniej będzie operować w kodzie niż na czystych bitach. Dodatkowo to rozwiązanie ma jeden plus - pluginy mogą używać tej samej tablicy uprawnień. -------------------- flexiCMS v2 [|||||||+--] 75% done
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 24.07.2025 - 17:22 |