Propozycja pól w tabeli użytkowników (users)

Kolumna Typ danych Opis
user_id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT Unikalny identyfikator użytkownika
user_type ENUM('individual', 'company') Określa, czy to osoba fizyczna (individual), czy firma (company)
user_name VARCHAR(255) Imię osoby fizycznej lub nazwa firmy
user_email VARCHAR(255) UNIQUE Unikalny adres e-mail
user_birth_date DATE NULLABLE Data urodzenia (tylko dla osób fizycznych)
user_nip VARCHAR(10) NULLABLE UNIQUE NIP firmy (10 cyfr, tylko dla firm)
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP Data utworzenia
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP Data aktualizacji

Metody weryfikacyjne

  • Unikanie redundancji danych:
    • Adres e-mail musi być unikalny → klucz unikalny (UNIQUE).
    • NIP musi być unikalny → klucz unikalny (UNIQUE), tylko dla firm.
  • Poprawność wprowadzanych danych:
    • Adres e-mail → walidacja formatem email.
    • NIP → dokładnie 10 cyfr, tylko cyfry (regex:/^\d{10}$/).
    • Data urodzenia → nie może być w przyszłości (before_or_equal:today).
  • Spójność danych:
    • Osoby fizyczne (user_type = 'individual') muszą mieć user_birth_date, ale user_nip = NULL.
    • Firmy (user_type = 'company') muszą mieć user_nip, ale user_birth_date = NULL.
    • Brak wartości NULL w kluczowych polach (user_name, user_email).
  • Indeksy dla optymalizacji zapytań:
    • Indeks na user_email (UNIQUE) dla szybszego wyszukiwania.
    • Indeks na user_nip (UNIQUE) dla firm.
    • Indeks na user_type (częste filtrowanie po rodzaju użytkownika).

Dodatkowo

Możemy za pomocą np. jQuery pokazywać bądź ukrywać pole NIP i odpowiednio walidować to w form request, na podstawie wybranego 'user_type'.