Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wartość pola niemoże sie powtarzać
Forum PHP.pl > Forum > Bazy danych
grzybowski11
Jaką właściwość powinno miec pole tak np. login aby jego nie mozna powtórzyć tej samej nazwy
tiraeth
Najlepiej tekstowe smile.gif

ale tak na serio to chyba UNIQUE
shpyo
heh, zawsze mozna to zalatwic warunkiem
jezeli istnieje juz takie pole LOGIN o wartosci USER to wywala blad biggrin.gif

albo nawet SELECT'em biggrin.gif
Przemo`
Ma to byc parametr INDEX czy KEY[sql:1:bea67e7ce3]CREATE TABLE phpbb_auth_access (
forum_id tinyint(1),
KEY forum_id (forum_id)
);[/sql:1:bea67e7ce3]
grzybowski11
chcę utworzyć tabelę która będzie przyjmował wartość która nie może się powtórzyć tak unikalny jest na tym forum użytkownik. A może zna ktoś jakiś spis co do czego służy w MySQL nie chodzi mi o kurs ale o coś takiego
INT - liczba całkowita w przypadku UNSIGNED
... itd
zalew
Cytat
A może zna ktoś jakiś spis co do czego służy w MySQL nie chodzi mi o kurs ale o coś takiego
INT - liczba całkowita w przypadku UNSIGNED
... itd

dokumentacja mysql?
http://dev.mysql.com/doc/mysql/en/Column_types.html?
Indeo
Jednym z podstawowych elementów logiki baz danych są indeksy.
Indeksy służą w uproszczeniu do kilku rzeczy. W skrócie indeksy są streszczeniem najwazniejszych informacji o tabelach - mogą pełnić funkcję czegoś na podobieństwo tablicy alokacji plików. Dobrze zaprojektowana baza to taka baza która jak najwięcej operacji wykonuje na indeksach a nie na samych danych.

Jeśli logika tylko pozwala uczynić coś co jest często używane indeksem unikatowym to należy to zrobić. Indeksy unikatowe po pierwsze przyspieszają wyszukiwanie (jeśli wiesz, że na liście dana pozycja występuje tylko raz to po znalezieniu pierwszego wystąpienia przerywasz szukanie, a jesli byś nie miał takiej pewności musiałbyś szukać do samego końca). Po drugie przyspieszają łączenie tabel w bardziej złożonych zapytaniach. Po trzecie indeksy unikatowe chronią strukturę logiczną bazy przed błędami logicznymi. Tak na przykład w twoim przypadku - nie może być dwóch użytkowników o tym samym loginie - dlatego login powinien być unikatowy.
Indeksy i klucze unikatowe można tworzyć na etapie tworzenia tabeli, mozna też utworzyć je konstrukcją ALTER:
  1. ALTER TABLE `child` ADD UNIQUE (`parent_id`)

Ale jeśli w tabeli będą już zdublowane wartości klucz nie zostanie utworzony.
Zabezpieczanie się przed wprowadzaniem do tabel niepoprawnych wartości można prowadzić też po stronie php (np. w komunikacji z użytkownikiem) ale ochrona samych danych po stronie bazy danych jest nieodzowna w przypadku niewychwycenia błędów przez skrypty php.

Indeksy nie musza być pojedynczymi polami tabeli - mogą być oparte na kliku polach które dopiero razem weryfikowane muszą być unikatowe - np. imię+nazwisko (zarówno imie jak i nazwisko z osobna nie mają podstaw by być unikatowe)

Co więcej ja w moich skryptach obsługi użytkowników wcale nie mam unikatowych loginów. Unikatowy musi byc użytkownik. Użytkownika nie identyfikuje po samym loginie ale po login+hasło. Więc może sie zdarzyć że dwóch użytkowników ma taki sam login ale inne hasła smile.gif ale kombinacja login+hasło jest jak najbardziej unikatowa i przypisana do danego użytkownika.

Wreszcie najbardziej zaawansowanym aparatem ochrony integralności danych są FORAIGN KEYS (klucze obce) nadzorujące integralność na poziomie kilku tabel w bazie. Np. klienci - faktury. Klucz obcy zabezpiecza przed wpisaniem do tabeli faktury faktury na klienta którego nie ma jeszcze w tabeli klienci. I odwrotnie. Klucz obcy nie pozwoli usunąć klienta jeśli ma już wystawioną fakturę.

Pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.