webForumDet fria alternativet
Logga in / Bli medlem

views

Databaser & SQL

5 svar · 169 visningar · startad av skyman

Medlem sedan juli 20012 450 inlägg
Frågan#1

Finns det någon som är en höjdare på views inom mssql. Jag har ett par frågor jag vill ödsla på någon.
Tack på förhand. /arwid

Medlem sedan dec. 200012 464 inlägg
#2

Du kan ju alltid ställa frågorna så får vi se.

Medlem sedan juli 20012 450 inlägg
#3

Jag har massa ordrar som skall löäggas in i en sql-databas. I varje order in går det det vissa kort. Man skall kunna se hur många kort som beställts, oavsett ordrar. Alltså om tre ordrar beställer 3 kort var så ska man kunna se att 9 kort beställts. Men man ska öven kunna gå in och kolla på specifik order och kolla vilka och vad för kort som den ordern innehåller. (Order och datumbaserat)
Man kan ju fixa det med massa stora tabeller men man kan ju lösa det snyggare med views har jag förstått.
Nån som har tips på hur man löser detta?
TAck på förhand

Medlem sedan dec. 200012 464 inlägg
#4

Det verkar vara en vanlig en-flera relation.

Dvs att du har en order-tabell och en orderItem-tabell (och en för kort ).

orders
------

orderId!orderDate!CustomerId
-------!---------!----------

orderItems
----------

orderId!Itemno!cardId
-------!------!------

cards
-----

cardId!Name!Description
-----------------------

För att få fram antal kort som ingår i en order


  select count(*) 
    from orderItems 
   where orderId = 4711

Antal kort för ett visst datum


   select count(*)
     from orderItems oi join orders o
       on oi.orderId = o.orderId
    where o.orderDatum = '23-04-2001'

Hämta info om kort som ingår i ordrar för ett visst datum


  select name,description,orderId
    from cards c join orderItems oi on c.itemId = oi.itemId
    join orders o on oi.orderId = o.orderId
   where o.datum = '23-04-2001'
   order by orderId

Jag förstår inte på vilket sätt man skulle kunna ha nytta av vyer i
detta sammanhang. En vy är ju i princip bara en namngiven select-fråga.

Medlem sedan juli 20012 450 inlägg
#5

Saken var den att jag hade fått tipset av min handledare att views är bra att använda. Men jag fattade inte varför och det blev en fråga då till wF. Kan du förklara denna koden lite mer? :)

select count(*)
from orderItems oi join orders o
on oi.orderId = o.orderId
where o.orderDatum = '23-04-2001'

Vad gör o och oi?
Tack för ditt svar, det kommer till stor hjälp.

Medlem sedan dec. 200012 464 inlägg
#6

Om man skriver


from orderItems oi

så fungerar oi som ett alternativt tabellnamn som man kan använda i stället för orderItems. Det är främst för att slippa skriva ut orderItems.

I vissa lägen måste man ha det t.ex. om man har flera förekomster av samma tabell i from-listan, då man annars inte kan skilja dessa åt.

Det finns dom som pläderar för att man alltid skall använda vyer för att skapa en logisk datamodell. Om man gör så skall man kunna ändra på den mer fysiska implementationen, dvs tabelledefinitionerna, utan att applikationer behöver förändras. Det enda man behöver förändra är då vy-definitionerna. Så man kan säga att det finns en viss poäng i det. Det som är problematiskt med en sådan approach är att i de flesta fall så behöver man skapa join-vyer som inte går att uppdatera direkt. Det går att få vilken vy som helst uppdaterbar mned hjälp av instead of triggers,men då måste man koda en hel del själv för att åstadkomma detta.

Man kan använda vyer dels för att förenkla, man behöver bara skriva select-satsen en gång och sedan använder man vy-namnet, dels för att begränsa vilken datamängd olika användare får se.

386 ms totalt · 4 externa anrop · v20260731065814-full.5386d3bf
123 ms — deklarationer (db)
129 ms — hämta statistik (db)
130 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)