Radi se novi projekat, biće velike tabele, i mnogo upita nad njima, i ideja je da se sve to lepo optimizuje maximalno, što hardwerski što kroz setovanja servera,
ali naravno akcenat će biti na dobro projektovanoj bazi, odnosno NORMALIZACIJA
Table1
Field 1: Primary Key1
Field 2: VarChar(..)
Table2
Field 1: Primary Key2
Field 2: VarChar(..)
Table X
Field 2: Primary KeyX
Field 2: Foreign Key Table1
Field 3: Foreign Key Table2
Znači ideja je da nema duplih podataka i da baza bude Normalizovana do kraja.
Nad tabelom X bi bio ViewX koji bi prikazivao Vrednosti VarChar iz referenciranih tabela.
E sada za potrebe lakšeg razumevanja onoga što ću da Vas pitam, napravio sam banalan primer:
Table TImena
============
ID int(11) PK
Ime varchar(30)
Table TPrezimena
================
ID int(11) PK
Prezime varchar(45)
Table TLjudi
============
ID int(11) PK
Imena_ID int(11)
Prezimena_ID int(11)
Tabele se uvezane ovako:

I imam View VLjudi koji bih koristio umesto tabele.:
Code:
CREATE VIEW `VLjudi` AS
SELECT Ime,Prezime
FROM TLjudi, TImena, TPrezimena
WHERE TLjudi.Imena_ID=TImena.Id AND TLjudi.Prezimena_ID=TPrezimena.Id;
CREATE VIEW `VLjudi` AS
SELECT Ime,Prezime
FROM TLjudi, TImena, TPrezimena
WHERE TLjudi.Imena_ID=TImena.Id AND TLjudi.Prezimena_ID=TPrezimena.Id;
I situacija je sledeća sa podacima:
Code:
mysql> SELECT * FROM TImena;
+----+------+
| ID | Ime |
+----+------+
| 3 | Mika |
| 1 | Pera |
| 2 | Žika |
+----+------+
3 rows in set (0.00 sec)
mysql> SELECT * FROM TPrezimena;
+----+---------+
| ID | Prezime |
+----+---------+
| 2 | Pantić |
| 1 | Šoić |
+----+---------+
2 rows in set (0.00 sec)
mysql> SELECT * FROM TLjudi;
+----+----------+--------------+
| ID | Imena_ID | Prezimena_ID |
+----+----------+--------------+
| 1 | 1 | 1 |
+----+----------+--------------+
1 row in set (0.00 sec)
mysql> SELECT * FROM VLjudi;
+------+---------+
| Ime | Prezime |
+------+---------+
| Pera | Šoić |
+------+---------+
1 row in set (0.02 sec)
mysql> SELECT * FROM TImena;
+----+------+
| ID | Ime |
+----+------+
| 3 | Mika |
| 1 | Pera |
| 2 | Žika |
+----+------+
3 rows in set (0.00 sec)
mysql> SELECT * FROM TPrezimena;
+----+---------+
| ID | Prezime |
+----+---------+
| 2 | Pantić |
| 1 | Šoić |
+----+---------+
2 rows in set (0.00 sec)
mysql> SELECT * FROM TLjudi;
+----+----------+--------------+
| ID | Imena_ID | Prezimena_ID |
+----+----------+--------------+
| 1 | 1 | 1 |
+----+----------+--------------+
1 row in set (0.00 sec)
mysql> SELECT * FROM VLjudi;
+------+---------+
| Ime | Prezime |
+------+---------+
| Pera | Šoić |
+------+---------+
1 row in set (0.02 sec)
Znači, ideja je i da u pravom projektu, umesto tabele sa gomilom vrednosti koje se ponavljaju, ja imam tabelu gde su sva polja Foreign Key-evi (Sem Primarnog, normalno), i imao bih view koji bi tu tabelu prikazivao kako treba.
Sve super sve sjajno sve bajno, ali na ovom primeru.
U stvarnosti bi umesto dva referencirana polja, bilo tridesetak polja, pa to pravi gimnastiku kada su u pitanju Insert i Update.
Pitanja
1) Da li je moguće uraditi
Code:
INSERT INTO VLjudi (Ime,Prezime) VALUES ('Mika','Pantić')
znači ime i prezime postoje u referenciranim tabelamaINSERT INTO VLjudi (Ime,Prezime) VALUES ('Mika','Pantić')
2) Da li je moguće uraditi
Code:
INSERT INTO VLjudi (Ime,Prezime) VALUES ('Marko','Marković')
ime i prezime NE postoje u referenciranim tabelama, i morao bi da se u njih radi INSERTINSERT INTO VLjudi (Ime,Prezime) VALUES ('Marko','Marković')
Predpostavljam da je odgovor NE, i da MySQL ne može baš toliko da se automatizuje (jer sam probao ove Query-je),
3) Da li bar postoji mogućnost da se podigne Trigger nad Ovim View-om u koji bih ja mogao da gurnem kood koji će pešaka kroz SQL kood proveriti da li ima, i ako treba dodati, pa onda gurnuti Key-ve u tabelu.
Ako ništa, radiću kao i do sada, kroz moj kood u aplikaciji, prvo će se raditi sve provere pa insertovati Foreign Key-evi u tabelu...
samo je to smor, i nad 30-tak polja, mnogo je to gimnastike, gde god imam insert i update, to je gimnastika na svakoj formi.
Znači jel može to ikako da trči na bazi, odnosno da mi se View ponaša kao tabela?
Nadam se da ste razumeli šta Vas pitam,
Pozdrav :) !
[Ovu poruku je menjao dzigilibonglica dana 27.01.2012. u 17:45 GMT+1]
[Ovu poruku je menjao dzigilibonglica dana 27.01.2012. u 18:16 GMT+1]