Levy -tietokantaohjelma

Back to yleinen keskustelu O

On tässä vähän tullut suunniteltua tietokantaohjelmaa, jolla levyt pysyisivät järjestyksessä. Välillä olen ihan pihalla mistä levykaupasta olen mitäkin levyä kysynyt, mitä ne vastas ja onko levy jo tilattu jne... Samaan ohjelmaan ajattelin laittaa levystä muutakin tietoa, kuten levyllä olevat remiksit, jotain kommentteja levystä ja muuta vastaavaa.

Koska en kuitenkaan ole mikään ohjelmoinnin asiantuntija, ei tälläisen ohjelman tekeminen itseltäni oikein onnistu. Siksipä ajattelin että tässä tapauksessa ohjelman tekeminen voisi onnistua samalla tavalla kuin Linuxinkin eli aloitetaan jostain yksinkertaisesta perusohjelmasta, jota jaetaan verkossa ja kaikki saavat tehdä siihen muutoksia ja tietysti käyttää sitä.

No, tein sitten (elämäni ensimmäisen kerran avasin koko ohjelman) Accessilla alun, jossa perusperiaate on valmiina (sekin voi kyllä olla jo ketuillaan), mutta läheskään kaikkia haluamiani ominaisuuksia en siihen saanut.

Tässä linkki ohjelmaan:

Levytietokantaohjelma

Oma pienimuotoinen suunnitelma löytyy tästä doc-tiedostona. Suurin osa näistä ominaisuuksista on jäänyt tekemättä juuri olemattomien koodaustaitojeni vuoksi. Toivottavasti joku osaa paremmin.

Levytietokantaohjelma - suunnitelma


Eli ei kun koodaamaan. Uuden version tiedostonimeen kannattaa varmaan laittaa muutoksen tekijän nimi ja päivämäärä, niin tiedetään aina mikä on uusin versio. Lisäksi täytyy tietysti kertoa mitä muutoksia uuteen versioon tuli.

P.S. Tosi koodaajille suosittelen tälläistä:
Supercoder2000

Pienimuotoisia levytietokantaohjelmia on tullut tehtyä kaksikin kappaletta eri kursseilla. Harjoituksena se on ihan jees. Mutta että käyttöä varten... sellaisia löytyy varmasti ilmaisohjelmina netistä.

accesilla voit helposti tehdä itse kannan, ja sen jälkeen jollain sovelluskehittimellä rakentaa sille graafinen ympäristö. accesin omia lomakkeita nyt ei kukaan jaksa katsella, joten ne ainakin itse jätin suosiolla. rakensin oman vastaavan "levysoftan" taannoin käyttäen kantana accesia ja itse sovelluksen tein delphillä, jossa on tyydyttävät ominaisuudet tietokantojen kanssa värkkäämiseen. eikä vaadi edes paljon koodaustaitoa. se on itse asiassa vieläkin evoluutioa asteella johtuen kroonisesta ajan puutteesta, mutta nythän sitä voisi ruveta kehittämään lisää..

ja tohon kannan suunnitteluun kannattaa oikeesti uhrata aikaa, hyvin suunniteltuna ja toteutettuna säästät paljon hermoja. kun kanta ajan saatossa kasvaa, alkaa ongelmat rönsyillä, kun poistelet ja lisäät kantaan jatkuvasti.

edit: säätöä

käyttäisitte edes MySQL:lää niin toi vois olla portattavissa johonkin muuhunkin käyttikseen kuin winukkaan :012:

Jos joku vääntää tällasen, ni mä voisin ottaa sorsat, ja napata tosta itelleni muutaman opintoviikon erikoistyön nimissä ;)

No kun nyt tietokantajärjestelmiä suunnittelen työkseni,
niin on tommonen simppeli tietokantasysteemi tullut
väsättyä SQL:llä ja ASP:llä. Accessiin en koske pitkällä kepilläkään.
Ominaisuuksia siitä tietysti puuttuu, mutta eipä ole
ollut tarvettakaan vielä muulle kuin ihan yksinkertaiselle
listalle.

Voisin tässä ehättäessäni tehdä tuon speksidocumentin pohjalta
SQL & ASP-version NoStatuksen systeemistä, access kun ei
kaikkien tarpeita palvele.

Tossa speksissä on kyllä IMHO aika turhiakin ominaisuuksia,
esim. tilatun levyn tila levykaupassa, kun levyt kuitenkin
toimitetaan n. viikon marginaalilla ja tilaa pitää päivitellä
pahimmillaan parillekymmenelle levylle kerrallaan.
Samoin järjestelmässä ei ole mielekästä (yli 1000 levyn
omistajan kannalta) syöttää jokaisen levyn kohdalta
ihan triviaaleimpia nippelitietoja, jos kohta näille
voidaan varata tilaa erikseen.

Quote by Tres

Accessiin en koske pitkällä kepilläkään.


Mikset? Sehän on ihan loistava pieniin sovelluksiin jotka pitää olla helposti siirrettävissä. Koneella ei tarvii olla edes tietokantasoftaa, ajurit riittää. :)

En mäkään sillä mitään bisneksen kannalta kriittisiä sovelluksia lähtisi toteuttamaan mutta on siinä ehdottomasti puolensa.

No kun nyt tietokantajärjestelmiä suunnittelen työkseni,
niin on tommonen simppeli tietokantasysteemi tullut
väsättyä SQL:llä ja ASP:llä. Accessiin en koske pitkällä kepilläkään.
Ominaisuuksia siitä tietysti puuttuu, mutta eipä ole
ollut tarvettakaan vielä muulle kuin ihan yksinkertaiselle
listalle.

Voisin tässä ehättäessäni tehdä tuon speksidocumentin pohjalta
SQL & ASP-version NoStatuksen systeemistä, access kun ei
kaikkien tarpeita palvele.


ja edelleen oltas naimisissa yhen alustan kanssa... ei hyvä.

käyttiksestä kannattanee tosiaan kyllä tehdä hötömölöpohjainen, oli kyseessä sitten standalone- tai centralized-systeeemi, jo ihan siirrettävyyden nimissä.

javaa vois tietty kans ajatella, siis standalone-tapauksessa. jre varmaan löytyy useemmasta koneesta kun vaikka apache;)
(toisaalta vaatis kuitenkin db-asennuksen...)
ihmisii vaan tuntuu jaava hirvittävän... osin ymmärrettävistä syistä tosin.


kaipa tuo kannattais tosiaan tehä ihan *AMP-pohjalle ja bundlaa apassi, mod_php ja mysql mukaan.

edit: typoi, typoi, tyop

Tossa speksissä on kyllä IMHO aika turhiakin ominaisuuksia,
esim. tilatun levyn tila levykaupassa, kun levyt kuitenkin
toimitetaan n. viikon marginaalilla ja tilaa pitää päivitellä
pahimmillaan parillekymmenelle levylle kerrallaan.
Samoin järjestelmässä ei ole mielekästä (yli 1000 levyn
omistajan kannalta) syöttää jokaisen levyn kohdalta
ihan triviaaleimpia nippelitietoja, jos kohta näille
voidaan varata tilaa erikseen.


tästä tulikin vielä mieleen jotta jos kanta kasvaa kovinkin isoksi voisi olla perusteltua pitää levyjen ym. lisäominaisuuksia omassa taulussaan (joka ois indeksoitu samalla tunnisteella ku varsinainen...).

mut kanta saa tosiaan olla aika iso ennenku tohon on aihetta... (tai no on siihen muutenki mut se on ehkä jo vähän makuasia;=) )

Quote by Sniff

ja edelleen oltas naimisissa yhen alustan kanssa... ei hyvä.

käyttiksestä kannattanee tosiaan kyllä tehdä hötömölöpohjainen, oli kyseessä sitten standalone- tai centralized-systeeemi, jo ihan siirrettävyyden nimissä.


No katotaan nyt kun saan tosta tietokannasta ekan kaavion
ihmeteltäväks, niin mietitään sit sitä käyttöliittymää. Omaan
käyttöön teen jokatapauksesta käyttöliittymän ASP:lla. ;)

Tosin tarvisin vähän Java-verryttelyä, joten sekään ei o poissuljettu.

Eli tässä alustava tietokantarakenne kaaviona:

http://www.antenniosasto.net/diagram.asp

Taulujen sisältämä data:


Levyn päätiedot:
DS_Disc_header

  • DiscID (Primary key)
  • Title
  • Format (esim. CD, 2CD, 12" maxi, LP, 7", minidisk, jne.)
  • ArtistID (kokoelmalevyillä artistitieto raidalle erikseen)
  • LabelID
  • Cat_No
  • GenreID (suurinpiirtein, tarkempi genre raidoille)
  • On_sale (jos levy myytävissä eteenpäin, mahdollistaa eril. myyntilistan)
  • Minimum_price (minimi hp. jos myynnissä)
  • Purchased_from (liike josta levy hankittu tämän perusteella saadaan mm. raportti genreistä joita kustakin liikkeestä löytyy)
  • Rating (subjektiivinen arvio levystä 1-10)
  • Condition (levyn fyysinen kunto 1-10)


Levyllä olevat raidat:
DS_Disc_Track
  • TrackID (Primary Key)
  • DiscID (Levy jolla biisit ovat)
  • Track_title
  • ArtistID
  • Remix (Flag-arvo, onko remix vai ei)
  • Remix_artistID (Remix-artistin Artisti-ID)
  • Track_Length
  • BPM
  • LabelID (Kokoelmalevyillä raidalle label tarvittaessa)
  • GenreID (Kokoelmalevyjä varten)
  • Comment


Genrelista:
DS_Genres
  • GenreID (Primary key)
  • Genre_Name



Artistilista:
DS_Artists
  • ArtistID (Primary key)
  • Artist_Name (Taiteilijanimi)
  • Artist_Realname (Tämän avulla voidaan esim. etsiä saman tekijän eri taitelijanimillä tekemiä raitoja)
  • Comment



Levykauppalista:
DS_Stores
  • StoreID (Primary key)
  • Store_Name
  • URL
  • Rating (1-10)
  • Comment



Levy-yhtiön tiedot:
DS_Label
  • LabelID (Primary key)
  • Label_Name
  • Country
  • GenreID (Suurinpiirtein)
  • Comment



Kommentteja / lisättävää? Rupeankin saman tien siirtämään
dataa vanhasta yksitauluisesta systeemistäni tähän uuteen
^___^

Quote by osm

Mikset? Sehän on ihan loistava pieniin sovelluksiin jotka pitää olla helposti siirrettävissä. Koneella ei tarvii olla edes tietokantasoftaa, ajurit riittää. :)

En mäkään sillä mitään bisneksen kannalta kriittisiä sovelluksia lähtisi toteuttamaan mutta on siinä ehdottomasti puolensa.


Ja jos tekee käyttöliittymän ASP:lla/PHP:lla/jne, niin
loppukäyttäjällä ei tarvitse olla kuin selainohjelma (palauttavat
siis clientille vain HTML:ää)

Kommentteja / lisättävää?


sopivasti, ei liikaa:

- edelleen kannattaisin levyn 'lisätietojen' sijoittamista erilliseen tauluun, esim. ds_disc_headre_moreinfo tjsp. (tilankäyttö, monikielisyys, turha pilkunnussinta...)

- 'vapaansanan' (~comment) sisältäviin tauluihin myös language-attribuutti/kolumni.

- jos genre on tarkoitus jaotella sekä karkeasti että tarkemmin voisi olla perusteltua lisätä esim. taulu ds_base_genres, johon määriteltäisiin nämä 'karkeat' genret. varsinaiseen ds_genres-tauluun sitten lisättäs 'extends'-sarake jossa viite base-genreen.
(tästä ei tosin ainakaan nopeesti miettien ois muuta hyötyä kun että vois hakee subgenrei yhellä kriteerillä. haittana tod. näk massiivinen lisä projektin kestoon, onhan se nyt nähty ettei niitä genrerajoi yhes yössä vedellä, sano!)

- toi ds_artists-taulun rakenne ei tunnu hyvältä. noh, makuasia. kyllähän se noinkin toimii. mä oisin ehkä laittanut id-viitteen nimen sijaan silleeniinku alias_of ja yaddayadda...


ja loppuun vielä todettakoon että jos tulee standalone-käyttöön nii nää huomiot on aikast turhii.

edit: skidisti jargonii vex

Quote by Sniff

- toi ds_artists-taulun rakenne ei tunnu hyvältä. noh, makuasia. kyllähän se noinkin toimii. mä oisin ehkä laittanut id-viitteen nimen sijaan silleeniinku alias_of ja yaddayadda...


Täsmennätkö? Artist_realname olisi siis esim. Josh Wink,
jolla taulussa taiteilijanimet Wink, Winx, Winc, eli esim.

ID - Artist_name - Real_name - Comment

01 - Winx - Wink, Josh - Recordings on label XXX
02 - Winc - Wink, Josh - Recordings on label YYY
03 - Wink - Wink, Josh - Recordings on label ZZZ

mietin tähän pariakin eri ratkaisua ja mielestäni tämä
oli kustannustehokkain, jos nyt ylipäätään halutaan
saman tyypin eri proggiksia seurata.

Genrejen jaottelemista erikseen subgenreihin en enää pitänyt
relevanttina, jos kohta joku saattaa tällekin löytää
käyttöä. Parhaillaan setvin vanhan tietokannan vapaana
tekstinä syötettyjä genrejä, joita löytyykin sitten n. 250
erilaista :rolleyes:

Täsmennätkö? Artist_realname olisi siis esim. Josh Wink,
jolla taulussa taiteilijanimet Wink, Winx, Winc, jne.
mietin tähän pariakin eri ratkaisua ja mielestäni tämä
oli kustannustehokkain, jos nyt ylipäätään halutaan
saman tyypin eri proggiksia seurata.


noh, artist_realname olisi siis viite riviin (id:hen) jossa ois artistin 'oikee' identiteetti. (imo vähentää sekaannusvaaraa ja tuntuu luontevammalta, mutta kuten sanottu, makusasioitakin, nämä... )

tuota genrejuttua ehdotin koska ymmärsin edellisen viestisi vähän pieleen... luulin siis että pyrit määrittämään levyille ensin kattogenren, esim. 'hård-fyra-på-golvet-skit' johon sisältyisi sitten vaikka hooceeta jne.

(mulla ois itse asiassa teoria siitä miksi ymmärsin sen väärin, pohjaa dj:n ja musadiggarin erilaisiin kulutustottumuksiin, mutta eip' kuulu tänne...)

ihan hauska ominaisuushan tuo voisi olla mutta en tosiaan ainakaan itse jaksaisi kuunnella käyttäjäpalautetta vääristä linjanvedoista;)

tres, kato kohta kax mun edellisestä postista!
(tai sit vaan jätä mun monikielisyyspyrkimykset huomiotta :rolleyes: )

edit: OBS

Quote by Sniff

tres, kato kohta kax mun edellisestä postista!
(tai sit vaan jätä mun monikielisyyspyrkimykset huomiotta :rolleyes: )


Lisätään speksiin, vaikka itse käytänkin tuota yksikielistä versiota;
monikielisyys tekee ylläpitoon ja käyttöliittymän kehittelyyn
pari lisämutkaa. Laitan päivitetyn tietokantakaavion
linjoille kohtapuoliin. Ts. jos oikein ymmärsin, haluat
mahdollisuuden monikielisiin kommentointiin, samalla
rivillä voi olla selitetekstit kahdella tai useammalla eri kielellä?
Eli laitan kommentit omaan tauluunsa.

Lisätään speksiin, vaikka itse käytänkin tuota yksikielistä versiota;
monikielisyys tekee ylläpitoon ja käyttöliittymän kehittelyyn
pari lisämutkaa. Laitan päivitetyn tietokantakaavion
linjoille kohtapuoliin. Ts. jos oikein ymmärsin, haluat
mahdollisuuden monikielisiin kommentointiin, samalla
rivillä voi olla selitetekstit kahdella tai useammalla eri kielellä?
Eli laitan kommentit omaan tauluunsa.


juup, eli kommenttitaulu vois olla vaikkapa muotoa disc_id, language, comment. (tämä vaatisi omat kommenttitaulut eri tauluille, toinen mahdollisuus olis että kaikilla kantaobjekteilla olis yksilölliset iideet ja siten yhteinen kommenttitaulu mutta siinä ois jo enemmän hommaa... kolmas vois olla että mä lopetan tän jossittelun ja lähen himaan)

Quote by Sniff

juup, eli kommenttitaulu vois olla vaikkapa muotoa disc_id, language, comment. (tämä vaatisi omat kommenttitaulut eri tauluille, toinen mahdollisuus olis että kaikilla kantaobjekteilla olis yksilölliset iideet ja siten yhteinen kommenttitaulu mutta siinä ois jo enemmän hommaa... kolmas vois olla että mä lopetan tän jossittelun ja lähen himaan)


http://www.antenniosasto.net/diagram.asp

Versio 0.6b, jossa mahdollisuus monikieliseen kommentointiin,
uusina tauluina

Kommenttitaulu:
DS_Comments
  • CommentID int 4
  • Comment nvarchar 4000
  • LanguageID int 4


ja kielitaulu:
DS_Languages
  • LanguageID int 4
  • Language_name varchar 20


Eli käyttöliittymässä voidaan esim. valita, halutaanko
kommenttitekstit näkyviin englanniksi vai suomeksi.
Pidin kustannustehokkaimpana saman taulun käyttämistä
kaikille kommenteille, näin voidaan hyödyntää vakiomuotoisia
kommentteja tarvittaessa useampaan tauluun, jne.

Hyvä että homma on mennyt eteenpäin. Suurimmasta osasta jatkokehittelyä en edes tajua mitään. :)


Quote by Tres


Tossa speksissä on kyllä IMHO aika turhiakin ominaisuuksia,
esim. tilatun levyn tila levykaupassa, kun levyt kuitenkin
toimitetaan n. viikon marginaalilla ja tilaa pitää päivitellä
pahimmillaan parillekymmenelle levylle kerrallaan.
Samoin järjestelmässä ei ole mielekästä (yli 1000 levyn
omistajan kannalta) syöttää jokaisen levyn kohdalta
ihan triviaaleimpia nippelitietoja, jos kohta näille
voidaan varata tilaa erikseen.


Ton levyn tilan yksittäisessä levykaupassa ajattelin olevan hyödyllinen, koska itse tilaan levyjä siten, että kysyn ensin yhdestä kaupasta ja jos sieltä ei jotain levyjä löydy niin kysyn niitä löytymättömiä seuraavasta levykaupasta jne. niin kauan kunnes ne jostain löytyy. Sen takia tilauksia on vetämässä vaikka missä putiikissa. Lisäksi tilauksissa voi joskus kestää kuukausiakin, joten ei millään enää voi muistaa mistä mikäkin levy oli tulossa.

Ja ton päivitysurakan ajattelin välttää sillä, että ohjelmassa saisi listattua levyjä niiden saatavuuden mukaan ja muutettua useamman levyn (tiettyjä) ominaisuuksia kerralla. Esim. jos minulla on levykaupassa A tilauksessa vaikka 20 levyä, joista saapuu 12, teen ensin listan kaikista levyistä, jotka on 'tilauksessa'-tilassa levykaupassa A, valitsen niistä saapuneet 12 ja muutan kaikkien niiden tilan kerralla tilaan 'levylaukussa'.

Ja tosiaankin, kaikkia ominaisuuksia ei ole pakko täyttää. Vain artisti, kappale ja levy-yhtiö (olkoonkin ne sitten vaikka unknown : unknown [unknown]) on hyvä olla.

Quote by NoStatus

Hyvä että homma on mennyt eteenpäin. Suurimmasta osasta jatkokehittelyä en edes tajua mitään. :)


:D

Quote by NoStatus

Ton levyn tilan yksittäisessä levykaupassa ajattelin olevan hyödyllinen, koska itse tilaan levyjä siten, että kysyn ensin yhdestä kaupasta ja jos sieltä ei jotain levyjä löydy niin kysyn niitä löytymättömiä seuraavasta levykaupasta jne. niin kauan kunnes ne jostain löytyy. Sen takia tilauksia on vetämässä vaikka missä putiikissa. Lisäksi tilauksissa voi joskus kestää kuukausiakin, joten ei millään enää voi muistaa mistä mikäkin levy oli tulossa.

Ja ton päivitysurakan ajattelin välttää sillä, että ohjelmassa saisi listattua levyjä niiden saatavuuden mukaan ja muutettua useamman levyn (tiettyjä) ominaisuuksia kerralla. Esim. jos minulla on levykaupassa A tilauksessa vaikka 20 levyä, joista saapuu 12, teen ensin listan kaikista levyistä, jotka on 'tilauksessa'-tilassa levykaupassa A, valitsen niistä saapuneet 12 ja muutan kaikkien niiden tilan kerralla tilaan 'levylaukussa'.


Mietin tollekin toteutustapaa vielä.

O