Avatar billede Slettet bruger
21. maj 2008 - 11:21 Der er 8 kommentarer og
1 løsning

Create view - fordele

Hvad er fordelene ved at lave et 'view' ?
Hvorfor ha' flere tabeler/views?
Avatar billede fennec Nybegynder
21. maj 2008 - 11:39 #1
Det er egentlig kun for at gøre noget arbejde lidt nemmere, så man er fri for at joine hele tiden. Hvis vi nu bruger Experten som eks.

De har en bruger tabel og en forum tabel. I forum tabellen stå brugeren jo kun opgivet med et ID, så de er nød til at joine tabellerne hvis de vil have brugernavnet. Men ved at lave et view kan de nemt skaffe alle oplysninger uden at skulle til at joine i koden:

ForumDataView:
select f.id, f.title, f.description, u.name
from forum f inner join user u on u.id=f.userID

I koden bag Experten vil de se simpelthen bare skrive:
"select * from ForumDataView"

Vi har f.eks også brugt det til at skabe views med specifike data i. På E ville det f.eks se sådan ud:

MySQLForumDataView:
select f.id, f.title, f.description, u.name
from forum f inner join user u on u.id=f.userID
where kategoriID=123
Avatar billede Slettet bruger
21. maj 2008 - 15:14 #2
Ja okay det kan jeg så godt se det smarte i.
Meget godt svar, smider du et svar? :P
Avatar billede fennec Nybegynder
21. maj 2008 - 16:25 #3
.o) <-- One Eyed Jack
Avatar billede arne_v Ekspert
22. maj 2008 - 02:00 #4
Et par supplerende betragtninger:
1) view kan betragtes som en encapsulation af tables d.v.s. at hvis al tilgang sker gennem
  et view så kan man ændre i tabelstruktur og bare ændre view kode uden at ændre
  i applikationen
2) normalt vil der være et lille bitte overhead ved at bruge views, men ved brug
  af såkaldte materialized views kan man faktisk få en performance forbedring
Avatar billede Slettet bruger
22. maj 2008 - 06:17 #5
Tak for svar/kommentare til jer begge 2.

Hvad mener du med 2'eren?
Avatar billede fennec Nybegynder
22. maj 2008 - 08:27 #6
I modsætning til et normalt view, som bare affyre den query, der er angivet hver gang den bruges, så gemmer et materialized views de data i en tabel. Det betyder at næste gang den køres, så skal den ikke til at joine, og har derfor data meget hurtigere. Problemet er så at data ikke nødvendigvis er "up to date", for hvis de orginale data ændres, sker det ikke i det materialized view. Viewet kan så opdateres en gang imellem, så den får de nye data. Det er derfor en rigtig god løsning hvis data ikke behøver at være up to date hele tiden (f.eks til historisk data)

http://en.wikipedia.org/wiki/Materialized_view

ps. materialized views kommer vist først i v6.0 af MySQL
Avatar billede Slettet bruger
22. maj 2008 - 08:29 #7
Okay lækker info.
Avatar billede arne_v Ekspert
22. maj 2008 - 14:44 #8
Jeg har forventninger om at database opdaterer det materialized view hver gang jeg
opdaterer tabellerne - i modsaetning til hvad wikipedia siger.
Avatar billede fennec Nybegynder
22. maj 2008 - 15:22 #9
arne_v >>
Ser ud til du har ret (i hvertfald i henhold til MS-SQL).

"As modifications are made to the data in the base tables, the data modifications are reflected in the data stored in the indexed view."

Tror vist jeg selv skal til at kikke nærmere på dette, da vi har et par systemer, som trækker nogle store rapporter. Så har jeg også lært noget idag :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester