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).