Autor | Zpráva | ||
---|---|---|---|
MaK Profil |
#1 · Zasláno: 8. 6. 2022, 12:15:28
Mám tabulku uživatelů obsahující snadno představitelné sloupce: user_id, name, email, created_time, password, state, face_img, ...
Uživatel se může nacházet v několika stavech (sloupec state): opened_nc - účet otevřen, ale není zkonfirmovaný email open - účet otevřen - 95% uživatelů je v tomto stavu deactivated - účet deaktivován deleted - účet smazán (čeká na kompletní odstranění všeho, co uživatel spáchal za celý svůj život) Každý stav vyžaduje nějaký jiný přístup/činnosti/operace. Např. ve stavu opened_nc chci uživatele opakovaně informovat, že účet nezkonfirmoval. To si žádá uložení dalších informací (kdy jsem ho naposled informoval, kolikrát jsem ho již informoval, ...). A tím se dostávám k otázce. Jak to udělat? Verze 1: Přidat do tabulky uživatelů sloupce smysluplné jen s tím jedním stavem. Případně přidat index potřebný pro práci jen s tím jedním stavem. Verze 2: Vytvořit pomocnou tabulku users_opened_nc, zachycující všechny uživatele v tomto stavu. Verze 3: Vytvořit pomocnou tabulku users_no_opened, která pokryje všechny stavy mimo stav opened. Verze 4: ??? Jistě budou "fungovat" všechny verze, ale která verze je ta korektní z hlediska DB. |
||
Firibix Profil |
#2 · Zasláno: 8. 6. 2022, 13:16:16
Reakce na MaK:
Já bych za korektní považoval variantu s tabulkami: users(id, name, email, created_time, password, state) acc_confirmations(id, user_id, last_notice, notice_count) kde v users budou uloženi všichni uživatelé a jejich stav bude zachycený ve sloupci state . Potřebná data ke sledování konfirmace účtu se uloží do tabulky acc_confirmations , kde user_id bude cizí klíč tvořící vazbu na tabulku users .
|
||
Kajman Profil |
Kolik tam bude řádků?
Přijde mi divné dávat last_notice, notice_count do nové tabulky. Vždyť všem uživatelům se přeci bude posílat žádost o potvrzení. Aby byli open, deactivated nebo deleted musí projít stavem opened_nc. |
||
MaK Profil |
#4 · Zasláno: 9. 6. 2022, 09:24:28
Kajman:
„Kolik tam bude řádků?“ Teď je všech řádků 3mil, ale těch ve stavu opened_nc jen 2tis. „Přijde mi divné dávat last_notice, notice_count do nové tabulky. Vždyť všem uživatelům se přeci bude posílat žádost o potvrzení. Aby byli open, deactivated nebo deleted musí projít stavem opened_nc.“ Mně zase přijde divné "špinit tabulku" sloupci a indexy, které aktuálně využije 0,06% řádků. Ale možná se na to dívám jen špatně. |
||
anonym_ Profil * |
#5 · Zasláno: 9. 6. 2022, 09:48:19
MaK:
Přesouvání uživatelů mezi tabulkami tak, jak jsi to navrhoval ty, je nesmysl ( users_opened_nc nebo users_no_opened ).
A ač by mi nevadily ty dva sloupce, jak navrhuje Kajman, byť u drtivé většiny uživatelů prázdné, osobně bych šel cestou uvedenou v #2. |
||
MaK Profil |
#6 · Zasláno: 9. 6. 2022, 10:06:42
anonym:
„Přesouvání uživatelů mezi tabulkami tak, jak jsi to navrhoval ty, je nesmysl“ Přesouvat uživatele mezi tabulkami jsem neměl v plánu. Pouze uživatelé, kteří jsou ve stavu opened_nc mají po dobu pobytu v tomto stavu pomocné informace v druhé tabulce. Ať už se ta tabulka jmenuje users_opened_nc nebo acc_confirmations .
|
||
anonym_ Profil * |
#7 · Zasláno: 9. 6. 2022, 10:10:41
MaK:
Aha, tak to jsem špatně pochopil tvou myšlenku/vyjádření. Každopádně zbytek mého postu zůstává v platnosti. |
||
Giga Profil |
#8 · Zasláno: 11. 6. 2022, 17:26:23
Udělal bych tabuku kandidátů a do tabulky aktivních bych je zařadil, až by potvrdili svůj zájem.
Tabulku kandidátů bych asi nepromazával a měl bych tak přehled o vícenásobných pokusech o registraci - např. ze strany robotů.... |
||
Časová prodleva: 2 roky
|
0