webForumDet fria alternativet

views

5 svar · 167 visningar · startad av skyman

skymanMedlem sedan juli 20011 347 inlägg
#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

------------------
-nada-

LarsGMedlem sedan dec. 200012 465 inlägg
#2

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

------------------
essentitia preter non sans multiplicandum

skymanMedlem sedan juli 20011 347 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

------------------
-nada-

LarsGMedlem sedan dec. 200012 465 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.

------------------
essentitia preter non sans multiplicandum

skymanMedlem sedan juli 20011 347 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.

------------------
-nada-

[Redigerat av skyman den 08 aug 2001]

LarsGMedlem sedan dec. 200012 465 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.
------------------
essentitia preter non sans multiplicandum

[Redigerat av LarsG den 08 aug 2001]

Genererad på 369 ms · cache AV · v20260730165559-full.f96bc7eb