Struktura mysql baze

Pozdrav!

Dali mi neko može reći kako je bolje, kako ce baza biti brža?

Imam u bazi tablicu korisnici, e sad kad oću da banujem nekog od korisnika dali je bolje da napravim u tablici stupac “banova” i da ga stavim u index poštom ču na jednoj stranici pretrazivat banovane korisnike da ih ispišem na stranicu listu banovani korisnika

CREATE TABLE `korisnici` (
	`id_korisnika` int(11) unsigned NOT NULL AUTO_INCREMENT,
	`korisnicko_ime` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
	`lozinka` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
	`e_mail` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
	`e_mail_sakriti` tinyint(1) NOT NULL default '0',
	`e_mail_obavijesti` tinyint(1) NOT NULL default '0',
	`prikazivanje_profila` tinyint(1) NOT NULL default '0',
	`datum_i_vrijeme_registracije` datetime NOT NULL,
	`datum_i_vrijeme_zadnje_posjete` datetime NOT NULL default '0000-00-00 00:00:00',
	`datum_i_vrijeme_trenutni_status` datetime NOT NULL default '0000-00-00 00:00:00',
	`ip_adresa` varchar(200) COLLATE utf8_unicode_ci NOT NULL,
	`spol` tinyint(1) NOT NULL default '0',
	`status` tinyint(1) NOT NULL default '0',

                [color="Red"]`banovan` tinyint(1) NOT NULL default '0',[/color]

	`datum_rodjenja` date NOT NULL default '0000-00-00',
	`lokacija` varchar(150) COLLATE utf8_unicode_ci NOT NULL default '',
	`ime_i_prezime` varchar(150) COLLATE utf8_unicode_ci NOT NULL default '',
	`o_meni` tinytext COLLATE utf8_unicode_ci NOT NULL,
	`telefon` varchar(100) COLLATE utf8_unicode_ci NOT NULL default '',
	PRIMARY KEY (`id_korisnika`),
	UNIQUE KEY `korisnicko_ime` (`korisnicko_ime`),
	UNIQUE KEY `e_mail` (`e_mail`),

	[color="Red"]KEY `banovan` (`banova`)[/color]
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

e sad kad je korisnik banovan u bazi ce mu biti 1 a kad nije 0.

Ili je bolje da napravim posebnu tablicu gdje cu spremati banovane korisnike jer u toj tablici nece biti sigurno puno banovani korisnika

CREATE TABLE `banovani_korisnici` (
	`id_banovani_korisnici` int(11) unsigned NOT NULL AUTO_INCREMENT,
	`id_korisnika` int(11) unsigned NOT NULL,
	`datum_i_vrijeme_banovanja_korisnika` datetime NOT NULL,
	PRIMARY KEY (`id_banovani_korisnici`),
	UNIQUE `id_korisnika` (`id_korisnika`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

i sad kad banujem korisnika u tablicu banovani korisnici spremam njegov id, i kad ocu provjeriti dali ima banovani provjerujem samo u ovoj tablici.

Kako je bolje?

Kako ce baza biti brža?

Hvala!

Svakako će biti brže ako postoji polje banovan u tablici korisnika.

U stvari, najbolje je imati polje u tablici korisnika, neki STATUS.
Npr:
0 - aktivan korisnik
1 - privremeno bananiran
2 - trajno bananiran
3 - …
4 - …

… i imati posebnu tablicu koja će pratiti povijest tih statusa.
CLAN_ID
DATUM
STATUS
ADMIN_ID (da se zna tko je promjenio status)

Ako si u prilici, svakako baci pogled na strukturu tablica nekog od kvalitetnih foruma, npr. vBulletin.

evo vaku sam napravio tablicu korisnici

CREATE TABLE `korisnici` (
	`id_korisnika` int(11) unsigned NOT NULL AUTO_INCREMENT,
	`korisnicko_ime` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
	`lozinka` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
	`e_mail` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
	`e_mail_sakriti` tinyint(1) NOT NULL default '0',
	`e_mail_obavijesti` tinyint(1) NOT NULL default '0',
	`prikazivanje_profila` tinyint(1) NOT NULL default '0',
	`datum_i_vrijeme_registracije` datetime NOT NULL,
	`datum_i_vrijeme_zadnje_posjete` datetime NOT NULL default '0000-00-00 00:00:00',
	`datum_i_vrijeme_trenutni_status` datetime NOT NULL default '0000-00-00 00:00:00',
	`ip_adresa` varchar(200) COLLATE utf8_unicode_ci NOT NULL,
	`spol` tinyint(1) NOT NULL default '0',
	`status` tinyint(1) NOT NULL default '0',
	`banovan` tinyint(1) NOT NULL default '0',
	`aktivacija` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
	`datum_rodjenja` date NOT NULL default '0000-00-00',
	`lokacija` varchar(150) COLLATE utf8_unicode_ci NOT NULL default '',
	`ime_i_prezime` varchar(150) COLLATE utf8_unicode_ci NOT NULL default '',
	`o_meni` tinytext COLLATE utf8_unicode_ci NOT NULL,
	`telefon` varchar(100) COLLATE utf8_unicode_ci NOT NULL default '',
	PRIMARY KEY (`id_korisnika`),
	UNIQUE KEY `korisnicko_ime` (`korisnicko_ime`),
	UNIQUE KEY `e_mail` (`e_mail`),
	KEY `banovan` (`banovan`),
	KEY `aktivacija` (`aktivacija`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

da ne otvaram novu temu evo postaviti cu pitanje ovdje.

kda napravim upit npr

dali mora biti i korisnicko_ime i lozinka u bazi stavljeni kao index?

ako mora biti oboje u index da onda pravim vakve upite:

Nema potrebe stavljati index na korisničko ime i lozinku. I jedno i drugo se obično provjerava u bazi samo jednom, kod logina i onda sprema u session. Ako se na puno mjesta ponovo loviš korinička imena (npr autori forumskih postova) onda možeš razmisliti o stavljanju indexa na korisničko ime.

a imam još jednu tabelu u bazi

CREATE TABLE `banovane_ip_adrese` (
	`id_banovane_ip_adrese` int(11) unsigned NOT NULL AUTO_INCREMENT,
	`ip_adresa` varchar(200) COLLATE utf8_unicode_ci NOT NULL,
	`datum_i_vrijeme_banovanja_ip_adrese` datetime NOT NULL,
	PRIMARY KEY (`id_banovane_ip_adrese`),
	UNIQUE `ip_adresa` (`ip_adresa`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

e sad me zanima dali je potrebno stavljati index na ip_adresa stupac, jer kod svakog učitavanja stranice provjeravat će se dali ima banovani ip adresa, a u bazi nevjerujem da ce biti ikad vise od 20 banovani ip adresa

npr.

[quote=“trnac”]U stvari, najbolje je imati polje u tablici korisnika, neki STATUS.
Npr:
0 - aktivan korisnik
1 - privremeno bananiran
2 - trajno bananiran
3 - …
4 - …

… i imati posebnu tablicu koja će pratiti povijest tih statusa.
CLAN_ID
DATUM
STATUS
ADMIN_ID (da se zna tko je promjenio status)

Ako si u prilici, svakako baci pogled na strukturu tablica nekog od kvalitetnih foruma, npr. vBulletin.[/quote]

Slažem se sa ovime. Kad učitavaš podatke o nekom korisniku daleko je bolje i brže da učitaš skupa sa username, pass itd i status Ban ON/OFF - s time izbjegneš kasnije povezivanje opet na bazu i opet dovlačenje toga istog.


Copyright © 2020 WM Forum - AboutContact - Sponsored by: Mydataknox & Webmaster.Ninja