Hirdetés

2024. május 3., péntek

Gyorskeresés

Útvonal

Fórumok  »  Szoftverfejlesztés  »  SQL kérdések (kiemelt téma)

Hozzászólások

(#5351) nyunyu válasza nyunyu (#5349) üzenetére


nyunyu
félisten

Érdekes ez a szám, nálunk 14,86%-ra jött ki a 8422 pesti / 56667 összes lakásfelújítási célú kölcsönt felvevők aránya. (lakáshitelünk az nincs.)

Hello IT! Have you tried turning it off and on again?

(#5352) Taci


Taci
addikt

Sziasztok!

Van egy "kategóriás" táblám, amibe cikkehez tartozó kategóriák kerülnek be. Ha egy cikkhez 3 kategória tartozik, akkor az 3 rekord ebben a táblában.

Ez a szám (kategória egy cikkhez) azonban módosulhat, bekerülhet új kategória, és ki is kierülhet olyan, amihez mégsem tartozik.

Így elkerülhetetlen, hogy "lyukak" legyenek a táblában (ha mondjuk 3 kategória volt egy cikkhez, és csak 2 maradt, akkor ott lesz egy "lyuk", mert az a rekord ki lesz törölve).

A kérdésem az lenne, hogy megéri ezeket a lyukakat feltöltenem? Van bármilyen hátránya ilyen "kis lyukaknak" a táblában?

Mert ha úgy oldom meg, hogy az új elemeket előbb a lyukas részekre töltöm fel, akkor bár "szét lesznek szórva", de hát arra van az indexelés.

De ha az új elemek mindig csak "felülre" kerülnek, akkor idővel nagyon foghíjas lehet - bár ezek max 1-2 rekordnyi "lyukak".

Mit ajánlotok? Kezeljem, és a lyukas részeket töltsem fel előbb az új elemekkel, vagy ekkora lyuk az nem számít, hagyhatom?
(Mindkét módszert meg kell még írnom, ezért kérdezem, mert mindegy, melyiket csinálom, az egyikkel foglalkoznom kell így is - úgy is. Csak akkor már jó lenne a megfelelővel.)

Köszönöm.

(#5353) pch válasza Taci (#5352) üzenetére


pch
aktív tag

Ha van az ID-ra index akkor nem foglalkoznék a lyukakkal...

http://sb-soft.hu - "A" számlázó

(#5354) Taci válasza pch (#5353) üzenetére


Taci
addikt

id, cikk_id, kategoria_id
Ezekből az id primary key, a cikk_id-ra és a kategoria_id-ra pedig külön index van.

(#5355) pch válasza Taci (#5354) üzenetére


pch
aktív tag

Akkor nem foglalkoznék vele. Ha nagyon lyukas akkor max az indexet építeném újra. Az se perc alatt megvan. Mondjuk chron -ba havonta.. De ez is csak akkor ha nagyon lelassul.
Nekem van olyan cég akinél több százezer termék van nem volt még újraindexálva.

http://sb-soft.hu - "A" számlázó

(#5356) sztanozs válasza Taci (#5352) üzenetére


sztanozs
veterán

Nincs túl sok teendőd a lyukakkal. Hacsak nem lesz belőlük túl sok, akkor nincs semmilyen sebességbeli hatása. Ha túl sok lesz, akkor érdemes újraindexelni a táblákat. "Feltölteni" pedig nem is fogod tudni kézzel, amíg újra nem indexelsz.

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#5357) Taci


Taci
addikt

Köszönöm a gyors választ mindkettőtöknek.

Még egy kezdő kérdés:
Jelen tudásommal az index újraépítése az az index törlése és újrakreálása. Van ennek esetleg jobb/más/hatékonyabb módja? (MySQL, MariaDB)

A REINDEX INDEX, REINDEX TABLE és OPTIMIZE TABLE opciókat találtam.
Ebből csak az utóbbi működik, viszont ezzel az üzenettel:
Table does not support optimize, doing recreate + analyze instead

(#5358) nyugis21 válasza Taci (#5268) üzenetére


nyugis21
kezdő

És ez a fórum tele van segítőkész tagokkal, szóval szerintem jó helyen vagy.

Hát úgy tűnik, a segítőkészség csak eddig tartott. :(((

Friss Nyugis - akinek nem hagynak nyugtot.:-(

(#5359) Taci válasza nyugis21 (#5358) üzenetére


Taci
addikt

Én ahogy láttam, elég sok segítséget, tanácsot és iránymutatást kaptál a fórumtársaktól.

Részemről továbbra is az alapok tanulmányozását javaslom, mert előbb-utóbb szükséged lesz rá, nem hiszem, hogy "kattintgatással" végig lehet vinni egy projektet.

Kezdetnek én mindig ezt ajánlom, mert egyből gyakorolni és kipróbálni is lehet:
https://www.w3schools.com/sql/

Talán próbálj meg kisebb területeket lefedni a kérdéseiddel, mert ezek talán túl általánosak, megfoghatatlanok, vagy nehezen megválaszolhatóak. (Számomra, sőt igazából nekem az egész témád az. Ezért sem igazán tudtam eddig érdemben segíteni.)

És azt kérlek, ne feledd, itt mindenki saját idejéből, önszántából segít, válaszol, senki sem kötelez senkit, hogy segítsen neked vagy másnak. És te sok választ és segítséget kaptál eddig is. Úgyhogy talán nem a legjobb "taktika" egy ilyen hozzászólás ezek után. De ez csak az én véleményem.

(#5360) martonx válasza nyugis21 (#5358) üzenetére


martonx
veterán

Ez egy SQL fórum, nem pedig MS Access fórum. Hogy táblák között milyen kapcsolatok vannak, SQL query-kben mit-hogy érdemes megcsinálni, abban tudunk segíteni, de szerintem itt senki nem használ MS Access-t (többek között ezért is próbáltalak volna lebeszélni róla).
Azaz a formok gyártásában, mi itt nem fogunk tudni segíteni neked.
Ahogy azt is hiába kérdezed meg itt, hogy MS Wordben, hogyan formázzuk hupililára egy bekezdés hátterét, miközben felhőcskés szegélye legyen. A mi szemszögünkből nézve az MS Access form készítés mizériája egy szinten van az MS word-ös példámmal.

Remélem így már érthető, hogy miért állt itt meg a segítségünk. Olvass MS Access doksikat, nézz MS Access form gyártó youtube videókat, ha létezik olyan, akkor írj direktben MS Access fórumokra, és biztos meg lesz a kérdésedre a megoldás.

Én kérek elnézést!

(#5361) nyugis21


nyugis21
kezdő

Taci:

nem hiszem, hogy "kattintgatással" végig lehet vinni egy projektet.

Nem is, projektet csak ésszel lehet végigvinni. ;)

Talán próbálj meg kisebb területeket lefedni a kérdéseiddel, mert ezek talán túl általánosak, megfoghatatlanok, vagy nehezen megválaszolhatóak.

Vagyis nem értettétek meg, hogy egyetlen részletkérdés volt a probléma, és nem jeleztetek vissza, hogy nem értitek.

Számomra a te javaslatod volt érthetetlen, értelmetlen nekiállnom sql programozási példáknak, amikor csak egyetlen részprogramra keresem a választ:
Hogyan lehet adatot bevinni az eset táblába jövőbeli feladatként, hogy az rögtön ugyan annak a táblának egy még nem létező rekordjára hivatkozzon?

És azt kérlek, ne feledd,

Kérlek, ne feledd, hogy a fórum korlátoltsága miatt csak egyetlen beírás lehetséges, ha hetekig nincs válasz, vagy újabb beírás, hetekig kell várnom, hogy esetleg rákérdezzek, miért nincs válasz, mert még a beírást se tudom utólag módosítani.

Próbáld ki, milyen érzés naponta többször ránézni a fórumra csak azért. hátha végre valaki írt valamit, hogy lehessen folytatni a munkát.
Kínzótábornak is elmegy ez a fórum. :O

martonx:

Ez egy SQL fórum, nem pedig MS Access fórum.

SQL kérdésem volt, nem access - amúgy az acces is sql alapú, csak vizuális megoldású, de van sql nézet nézete is.

Hogy táblák között milyen kapcsolatok vannak, SQL query-kben mit-hogy érdemes megcsinálni, abban tudunk segíteni, de szerintem itt senki nem használ MS Access-t (többek között ezért is próbáltalak volna lebeszélni róla).

Pontosan ez volt a kérdésem, az általad javasolt megoldásra irányult, hogyan lehet vele adatot bevinni, mert nem értem és nem találtam rá sehol példát, pedig végignéztem az acces helpjének a részeit és letöltöttem és végignéztem az access2007 videókat yt-ról, még az angol nyelvűeket is.

Sőt, letöltottem az elmúlt tíz év access érettségi feladatait is, de azok nem foglalkoznak adatbevitellel, csak lekérdezésekkel és jelentésekkel.

Mindenhol csak 1-sok, sok-1 vagy sok-sok kapcsolat van, de az utóbbinál is két különböző tábla között, te viszont ugyan abba a táblába tetted vissza a kapcsolatot, amire sehol sincs példa.
Ezért kérdeztem, hogy adatbevitelt hogyan oldod meg ott?
Nem értem, ha egyszer egy táblában egy rekordot kezdek bevinni, hogyan tudok ugyan abba a táblába egy vagy több újabb rekordot úgy beszúrni, hogy még nem zárom le a rekordot, ráadásul rögtön kapcsolat lesz az újonnan bevitt rekordokkal?

A mi szemszögünkből nézve az MS Access form készítés mizériája egy szinten van az MS word-ös példámmal.

Igen, a könyvben is pár oldalon vannak az adatokkal kapcsolatos dolgok, majd sok-sok oldalon, hogy milyen betűtípus, szín, meg sok minden lehet és hogyan lehet logot használni képként, stb. amik nem érdekelnek. :(

Remélem így már érthető, hogy miért állt itt meg a segítségünk. Olvass MS Access doksikat, nézz MS Access form gyártó youtube videókat, ha létezik olyan, akkor írj direktben MS Access fórumokra, és biztos meg lesz a kérdésedre a megoldás.

Lásd a fentieket, úgy tűnik, egy sql megoldást javasoltál, amit az access könyvek nem ismernek, erre kérdeztem rá.
A könyvek, help és videok alapján arra tippeltem, hogy az adatbevitelnél talán egy lekérdezést kell meghívni, ami létrehoz egy új rekordot, és utána lehet az adatot bevinni, de nem értem, hogyan, ha egyszer még a tábla korábbi rekordját nem zártam le. (Sőt, több jövőbeli feladat lehet, úgyhogy sok új feladatot kell beszúrni a táblába.)

Lehet, hogy jelentkezhetnél a megoldással a ms-nél is, hogy nem csak különböző táblák között lehet sok-sok kapcsolatot létrehozni. :C

Friss Nyugis - akinek nem hagynak nyugtot.:-(

(#5362) Ispy válasza nyugis21 (#5361) üzenetére


Ispy
veterán

Az access backend sql, de a frontend vba, azaz visual basic kódokat kell írni a formokhoz. A formok és a controlok pedig eseményvezéreltek. Nekünk a programunk 14 évig accesben futott, több 10000 sornyi programkód volt mögötte, ez nem triviális.

Nézd meg udemyn hátha van fent pár euróért anyag fent access frontendhez.

De ez már vegytiszta programozás, nem egy ilyen fórumba válaszolok rá pár sorba dolog.

Egyébként a youtubon van egy rakat videó.

[ Szerkesztve ]

"Debugging is like being the detective in a crime movie where you're also the murderer."

(#5363) Ispy válasza Ispy (#5362) üzenetére


Ispy
veterán

De lehet szimplán data bindingel hozzákötni a sourcet a táblához, a controlokba megadod tervező nézetbe melyik hova kapcsolódik és akkor auto save van, sajnos már nem emlékszem a részletekre vagy 12 éve nem dolgoztam vele...hála égnek. :D

Szóval valami olyasmi rémlik, hogy a form tervező nézetben a propertiek között meg tudod adni a táblát és utána mondjuk egy textboxnak ami kiraksz rá ki tudod választani a fieldet a táblából, amit kezelnie kell, szóval ha csak ilyen fapad kell, azt talán meg lehet úszni vba kód nélkül.

[ Szerkesztve ]

"Debugging is like being the detective in a crime movie where you're also the murderer."

(#5364) martonx válasza nyugis21 (#5361) üzenetére


martonx
veterán

Kérlek nézd el nekem, hogy utoljára valamikor 2010 táján Access-eztem, és nem is hiányzik.
A gépemen is csak azért van, mert múltkor a kedvedért feltelepítettem, hogy bebizonyítsam hogy lehet Accessben egy táblát önmagához kötni.

"Ezért kérdeztem, hogy adatbevitelt hogyan oldod meg ott?
Nem értem, ha egyszer egy táblában egy rekordot kezdek bevinni, hogyan tudok ugyan abba a táblába egy vagy több újabb rekordot úgy beszúrni, hogy még nem zárom le a rekordot, ráadásul rögtön kapcsolat lesz az újonnan bevitt rekordokkal?"

Fingom sincs (régen is VBA-t programoztam Access mögött, nem az adatbeviteli formokkal tökölődtem), hogy kell az adatbeviteli formokat összenyomkodni varázslóban.
VISZONT: háttal ülsz a lovon logikailag. Adatbevitelnél lényegtelen a kapcsolat az esemény, és a jövőbeli esemény között, mert nyilván ekkor még nincs is kapcsolat. Felviszed az eseményt, és kész. Ez az esemény lesz a szülő eseményed.
Egy dolgot kell megoldanod, hogy amikor egy újabb eseményt felviszel a formon, akkor ki tudj (de ne legyen muszáj) választani egy szülő eseményt, pl. az előzőleg felvittet. Így tudod logikailag megoldani, hogy a jövőbeli események kapcsolódnak az őket kiváltó eseményhez, azaz a tábla önmagához kapcsolódik.
Fogalmam sincs, ezt hogy kell csinálni a formon, de biztos, hogy elég csak a form varázslójában kattintgatni.

Sok sikert, részemről téma lezárva.

Én kérek elnézést!

(#5365) nyugis21 válasza martonx (#5364) üzenetére


nyugis21
kezdő

Kérlek nézd el nekem, hogy utoljára valamikor 2010 táján Access-eztem, és nem is hiányzik.

Ezt nem értem, megsértődtél, mert gratuláltam, hogy találtál egy extra megoldást, amit eddig mások nem vettek észre, hogy táblán belül is lehet kapcsolat?
Ezen miért sértődtél meg?

Egy dolgot kell megoldanod, hogy amikor egy újabb eseményt felviszel a formon, akkor ki tudj (de ne legyen muszáj) választani egy szülő eseményt, pl. az előzőleg felvittet. Így tudod logikailag megoldani, hogy a jövőbeli események kapcsolódnak az őket kiváltó eseményhez, azaz a tábla önmagához kapcsolódik.

Sejtettem, hogy nem accessel van a gond, ezek szerint nem is az adatbevitellel, hanem még a táblák egymáshoz kapcsolásával.

5295-nél tartunk, eddig jutottam, ezek szerint ez így nem jó?

Itt egy példa, mondjuk a mostaniak alapján:

1. esemény:
találkozó X.20 21-23 között, résztvevők: nyugis, martonx, ispy
leírás: access adatbeviteli form probléma megbeszélése
feladatok:
nyugis - acces-ben adatbeviteli formok végigpróbálása
ispy - acces és vba kapcsolati videok listájának kigyűjtése

Vagyis a következő két esemény az lesz, hogy
nyugis mondjuk X.21 9-13 között végigteszteli az access formokat, mikor milyen hibák jönnek elő
majd a harmadik esemény az lesz, hogy ispy mondjuk X.22 14-22 között webes keresgéléssel listát csinál.

Ezek az események még nem léteznek, még csak feladatok, de el van döntve, hogy ezek lesznek a következők, amik az 1-es esemény, a találkozó következményei.

Vagyis nekem előre kell beírnom, hogy mi(k) lesz(nek) a következő lépés(ek) és majd akkor lesznek véglegesítve (kezdő-vég dátum, résztvevők, leírás) amikor megvalósult.

Akkor a 5295 táblák közötti kapcsolat így nem jó?

Ispy:
Mi a trükköd, hogy te tudsz kétszer is írni egymás után?

Kössz, de nyugdíjas fejjel nem akarok nekiülni programozni, az egyetlen életcélom most ezt a megoldást megvalósítani, legkésőbb a karácsonyi ünnepekig, ez a nagy projektem. :D

Friss Nyugis - akinek nem hagynak nyugtot.:-(

(#5366) sztanozs válasza nyugis21 (#5365) üzenetére


sztanozs
veterán

Újoncok és Lelkes újoncok még nem küldhetnek több üzenetet egymás után a fórumba.

[ Szerkesztve ]

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#5367) pch


pch
aktív tag

Szerintem jobban járna egy mysql-el. Annak ott a phpnyadmin. Ott tud adatot bevinni meg sql-t lekérni.
Wamp-al felmegy pár klikkre.

http://sb-soft.hu - "A" számlázó

(#5368) sztanozs válasza pch (#5367) üzenetére


sztanozs
veterán

Access-ben is simán tud adatokat felvinni, nem kell ehhez phpmyadmin - csak szivatná vele magát.

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#5369) sztanozs válasza nyugis21 (#5365) üzenetére


sztanozs
veterán

Ezt a videót egyébként megnézted?
Ebben a template-ben vannak FORM-ok és RIPORT-ok is, szóval meg lehet nézni, mit hogyan kell csinálni egy form vagy egy riport készítésénél: https://support.microsoft.com/hu-hu/office/vide%C3%B3-az-asztali-feladatkezel%C3%A9si-adatb%C3%A1zissablon-haszn%C3%A1lata-9a9736a4-9aac-45a1-93dd-4eca934cf8ef

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#5370) nyugis21 válasza sztanozs (#5369) üzenetére


nyugis21
kezdő

Most látom, hogy már lelkes újonc vagyok, a moderátorok adnak kategóriákat?

------
1. Nem, az oldalon nem tudok semmit megtalálni, bármit keresek, az első tiz találatot megjeleníti - ami többnyire aktiváld-töltsd le, stb. - és nem enged továbblépni a többire.

2. amennyit értek a videóból, az már 2016-os access példafájl, képpel, és csak a task-employee két táblából áll.
ennél jobb a projects adatbázis - lásd lentebb a képet - ha megtalálnád az azt bemutató videot, megköszönném, ott nem értem, miért van külön task és common task tábla is, eltérő kapcsolatokkal.

3. Ez volt az első kérdésem, hogy hogyan lehet access példa adatbázisokat összehozni, de nem volt rá válasz. Végignéztem mindet, ami 2007-ben volt, a project adatbázis volt a legjobb, de nagy része felesleges nekem, más részét nem értem, mire jó és miért így vannak a kapcsolatok, és van, ami nekem hiányzik belőle, ezért kellett nekem több tábla.


Itt van
project - ami nálam ügy,
tasks - ami nálam feladat
employees - ami nálam emberek
common tasks - fogalmam sincs, hogy mire jó, és csak az emberekkel van kapcsolata

hiányzik az
eset - vagyis a project/ugy egyes lepesei
hely - esetek valahol történnek (vagy virtuálisak, pl. telefonhívás)

Valamint itt úgy látszik, hogy mind a project, mind a task csak egy emberhez tartozhat, míg ténylegesen többen vesznek benne részt, és gyakran mindig mások.

[ Szerkesztve ]

Friss Nyugis - akinek nem hagynak nyugtot.:-(

(#5371) sztanozs válasza nyugis21 (#5370) üzenetére


sztanozs
veterán

Mondjuk ha még mindig access 2007-el szenvedsz, akkor sok segítséged nem lesz (még a neten se nagyon), az már egy rég kivezetett verzió.

A Projekt template-hez úgy nézem nincs videó, csak szöveges bemutató:
https://support.microsoft.com/hu-hu/office/a-projects-access-adatb%C3%A1zissablon-haszn%C3%A1lata-87fdb02a-b109-4864-ab94-95e7ce1b6443

Ezeket a plusz táblákat, amik neked kellenek, fel lehet venni a legyártott sablonokhoz, csak meg kell csinálni a hozzájuk tartozó formokat, ha nem akarod táblázatos módban kezelni az alapadatokat.

Törölni is lehet belőle táblákat, csak vele együtt célszerű törölni a hozzájuk tartozó formokat is, amik nem kellenek. Illetve ki kell szedni a megmaradó formokból a hozzájuk tartozó beviteli mezőket.


common tasks - fogalmam sincs, hogy mire jó, és csak az emberekkel van kapcsolata
Ezek olyan feladatok, amik nem tartoznak projektekhez, de valaki elvégzi. Mivel a template egy projektcég/projekt csapat munka kimutatására szolgál így célszerű nyilvántartani azokat a feladatokat is, amik nem kifejezetten projektekhez tartoznak, hogy lehessen látni a kollégűk leterheltségét (terhelhetőségét).

[ Szerkesztve ]

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#5372) nyugis21 válasza sztanozs (#5371) üzenetére


nyugis21
kezdő

Furcsa ez a fórum, elvileg segítőkészséget ígértek, de ahogy visszaolvastam, a nekem írt "tanácsok" nagy része nem a témához tartozik, vagy félrevezető. ;]

Utána néztem, az acces is sql alapú, ami 1992-es megegyzés (szabvány?) alapján jött létre, majd 1999-ben volt egy újabb verzió, de azt már nem mindenki fogadta el. Akkor most nem mindegy, hogy a program 2007-es vagy frissebb, ha évtizeddel korábbi kódot használ?

Legyen lényeges téma is:
Agyalok egy ideje a megoldáson, szerintem táblák közötti kapcsolat mindennek a kulcsa, azt kellene valahogy összehozni, ebben lenne szükségem segítségre, az pedig még a programtól független megoldásnak tűnik.

Amin elakadtam:
A project minta adatbázisban van egy jónak látszó megoldás, hogy a projekt-hez lehet feladatokat csatolni, amihez felelőst lehet kinevezni, de ha jól értem, ez csak úgy működik, hogy a projektnek is van felelőse (tulajdonosa?).

Az én megoldásomban a projekt az eseményekből áll, amihez sok résztvevő tartozik - azaz ellentétes a példával, ahol csak egy felelős van - és az eseményekhez kellene feladatokat csatolni, amiknek lenne felelőse.
DE: a feladat megvalósításával az is eseménnyé válik.

(Példa:
esemény: telefonhívásos megbeszélés 2 személy között, megegyeznek, hogy az egyik megvesz valamit, majd elviszi a másiknak, aki azt majd később visszaadja neki.

Erre két megoldást látok:
1.séma
Az egyik megoldásnál van egy esemény 2 fővel, telefonos megbeszélés, majd lesz egy újabb esemény 2 fővel a találkozóról, ahol a lényeg az, hogy az egyik átad valamit a másiknak.

Az első eseményhez kapcsolódik két feladat, az első feladatnak az egyik személy a felelőse, és a téma a bevásárlás.
A másik feladatnak mindkét személy a felelőse és a téma adott helyen és időben találkozni.

A második esemény már a megvalósult találkozó lesz, ahol adott helyen és időben a két személy találkozik és megtörténik az átadás.
Ehhez rögtön kapcsolódik egy újabb feladat, a második személy a felelőse, és adott határidőre vissza kell adnia a dolgot az első személynek.

Ekkor kell két külön tábla, az egyik az esemény, amikhez feladatok kapcsolódhatnak, a másik a feladat, ahol csak az a lényeg, hogy megvalósult, vagy sem.
A hátránya, hogy néha ugyan az a dolog feladat és esemény is lesz, lekérdezésnél esemény és feladat sorrendet kell választani.

2.séma
A fenti folyamat azzal a különbséggel, hogy a feladatok a sikeres teljesüléskor eseménnyé válnak.
Ekkor a lekérdezés (megjelenítés) egyszerűbb lesz és nem lesz párhuzamos adat, de fogalmam sincs, hogyan lehet ezt megvalósítani - talán kell egy "kód" mező, hogy ez feladat vagy esemény?

A másik problémám az, hogy a feladathoz egy felelős kell, ami a ms projekt mintában látszik, hogy csak egy személy kapcsolódik hozzá, DE! amint eseménnyé válik, akkor már ellenkező irányú kapcsolat kell, mert akkor már több résztvevője lehet az eseménynek.
Tehát, ha az ms projekt sémáját követem, akkor a második feladatot, amikor két személynek kell találkoznia, mindkét személynek ki kell osztani, személyenként lehet egy feladat, és mindkettőnek teljesülnie kell, hogy létrejöjjön a két feladatból az egy esemény.

Ez önellentmondásnak tűnik számomra, ti ezt hogyan oldanátok meg? (vagy fel, ha az ellentmondást fel kell oldani.) ;)

Friss Nyugis - akinek nem hagynak nyugtot.:-(

(#5373) martonx válasza nyugis21 (#5372) üzenetére


martonx
veterán

Az 1-es sémára szavazok. Viszont tényleg van ezt értelme ennyire mikroszkopikus felbontásban, ultra részletesen adatbázisban ábrázolni?
Feladat és eseményenként? Ennyi erővel akkor már az is feladat és persze esemény lehetne, hogy a találkozóra menet kimész az utcára, felülsz a villamosra, veszel egy menetjegyet stb...

Szóval szerintem továbbra is túlbonyolítod.

Én kérek elnézést!

(#5374) nyugis21 válasza martonx (#5373) üzenetére


nyugis21
kezdő

Az esemény az, ami megtörtént, a feladat az, ami elintézésre vár, el kell őket különíteni, ráadásul egészen más kapcsolatokra van szükség, lásd lentebb.

A példát csak hirtelen írtam, de nyilván minden az, amit meg kell tenni a közeljövőben.
Azt még nem tudom, mi lesz, ha a feladat meghiúsul, majd kiderül, ezért kellene végre eljutnom odáig, hogy legyen egy minimálisan működő séma és elkezdhessem tesztelni.

A táblák közötti kapcsolatot továbbra se látom tisztán, az eseménynél egy eseményhez kell több személy, a résztvevők, míg a feladatnál egy személyhez több feladat kell, pont az ellenkezője.

Nem jövök rá, hogyan lehet az egészet kezelni, ebben kérek segítséget.

[ Szerkesztve ]

Friss Nyugis - akinek nem hagynak nyugtot.:-(

(#5375) sztanozs válasza nyugis21 (#5374) üzenetére


sztanozs
veterán

Ez egy M:N kapcsolat (több eseményhez tartozhat több személy). Kell hozzá egy kapcsoló tábla.

Táblák és kapcsolatok:

# feladat szervezője
[Esemény] 1:N [Személyek]

# résztvevők
[Esemény] 1:N [Résztvevők-kapcsolótábla] M:1 [Személyek]

[ Szerkesztve ]

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#5376) nyugis21


nyugis21
kezdő

Megpróbáltam az összes szempontot figyelembe véve megoldani, de túl bonyolult lett, így egyszerűsítettem, lemondtam a feladat-esemény bonyolultságáról, külön kezelem őket.
(5294-ben és 5370-ben volt a két különböző séma)

A feladatnál az lesz a lényeges, hogy lezáruljon, és ha fontos, akkor eseménylistába be lesz írva, mint egy fontos történés.

Itt az első változat, szerintetek ez a logika jó, vagy még mindig van vele valami gond?

Az UGY (project)-nek lehet egyetlen felelőse és sok eseménye (ESET).

Az eseményeknek (ESET) csak egyetlen felelőse és egyetlen helyszíne, de M kapcsolóséma révén sok résztvevője lehet, és sok FELADAT tartozhat hozzá.

Egy FELADAT csak egyetlen eseményhez (ESET) kapcsolódhat és csak egyetlen felelőse lehet, a határidő a lényeg, és az, hogy nyitott vagy lezárult. (Hopp, ezt a mezőt elfelejtettem felvinni.)

Minden UGY-nek, ESET-nek és FELADAT-nak egy felelőse lehet, de M révén sok eseményen (ESET) vehet részt és egy eseményen több résztvevő lehet.

[ Szerkesztve ]

Friss Nyugis - akinek nem hagynak nyugtot.:-(

(#5377) sztanozs válasza nyugis21 (#5376) üzenetére


sztanozs
veterán

Ez egész érthetőnek és jól felépítettnek tűnik a leírás alapján.
Mondanál egy Móricka-példát arra, hogy mi lehet egy Projekt < több esemény < több feladat?

Nekem (praktikussági okból) ez a három szint már túl soknak tűnik mindennapi használatra.

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#5378) nyugis21 válasza sztanozs (#5377) üzenetére


nyugis21
kezdő

Mondanál egy Móricka-példát arra, hogy mi lehet egy Projekt < több esemény < több feladat?

5374 első mondatában leírtam, a projekt az eseményekből áll, amik megtörténtek, a feladatok az elintézendőek, amik jövőbeli dolgok.

Először azokat is be akartam venni, hogy lehessen látni az összes történést, de rájöttem, hogy az túl sok lenne, így azt majd csak ki kell pipálni, hogy még élő dolog, vagy már befejezett.

A Móricka példa a kedvedért:
projekt (ügy):
az osztályban lévő lányokat virágesővel köszönteni 1 hét múlva.
1. esemény:
gyűlés, résztvevő Móricka, Ottó, a tizedes, meg a többiek
leírás: Megalakult a "LáViKö" csoport, a lányokat virágesővel köszöntők csoportja.

Feladatok:
1. feladat felelős: Móricka, teendő: megtudni, hol a legolcsóbb a cserepes virág - kipipálva
2. feladat felelős: Ottó, teendő: létrát szerezni - kipipálva

2. esemény:
gyűlés, résztvevő Móricka és Ottó
leírás:
Móricka közli, hogy 13 virágkereskedést hívott fel, a legtávolabbinál van a legolcsóbb cserepes virág, így autó kell a beszerzéshez
Ottó közli, hogy megszerezte a szomszéd villanyszerelő létráját, de sietni kell a visszaadással, mert az illető a csavarhúzójába kapaszkodva maradt.

Feladat:
1. feladat: pénzt összeszedni a tagoktól - kipipálva
2. feladat: cserepes virágokat gyorsan elhozni - kipipálva
3. feladat: virágesőt lebonyolítani- kipipálva
4. feladat: létrát visszavinni- kipipálva

3. esemény
résztvevők: Móricka, Ottó, a tizedes, meg a többiek
leírás: 600 ft-ért megvették a virágokat, 200 ft-ért elhozták taxival, virágeső létra tetejéről megvolt, annyira sikeres lett, hogy a lányok a földön fekve sikongattak

4. esemény
Ottó a létrát visszavitte, a villanyszerelő a földön feküdt aléltan, így a létrát ratette, hogy balesetnek látszódjon

Ez egész érthetőnek és jól felépítettnek tűnik a leírás alapján.

Nekem nem úgy tűnik, pl. hova írom be az eseményekhez a résztvevőket? Az ESET táblába nem tudom betenni, mert onnan az ID-vel kell kapcsolódnom a M táblához, akkor az M táblába kell felvennem egy résztvevők rubrikát?
Valamint a Feledat-okat is jelezni kell, hogy élő, vagy megoldva, ezt talán logikai Y/N mezővel meg lehet oldani, de akkor valahogy kezelni kell, hogyha megoldva, akkor ne legyen megjelenítve a lekérdezésben később, de jelentésekben szerepeljen, ha a feladatok is érdekesek lesznek.

Adatbevitellel próbálkoztam, de úgy tűnik, az access nem szereti, ha egy id-hez egynél több tábla kapcsolódik, erre még megoldást kell találnom.

Friss Nyugis - akinek nem hagynak nyugtot.:-(

(#5379) Szmeby válasza nyugis21 (#5378) üzenetére


Szmeby
tag

Parancsolj, a fenti móricka példa első két eseménye és résztvevői. Valahogy így fog kinézni a tábláid tartalma. Megszíneztem az összetartozó dolgokat, hogy könnyebb legyen szemmel összepárosítani. (A "meg a többieket" lespóroltam róla, mert nem volt elég konkrét a példához.)

[ Szerkesztve ]

(#5380) Pulsar


Pulsar
veterán

Sziasztok,
egy kis segítséget szeretnék kérni. Vagy egy tömeges adatlekérésem. Ez úgy szoktam megoldani, hogy a kért ID-kat betöltöm egy temp páblába, a temp táblát beírom a from-ba, és a where-be beírom, hogy azonosito = temp.column1
Mi olyankor az eljárás, hogy a temp táblám két oszlopot tartalmaz, és azt szeretném, hogy csak az egymás melletti megfelelőségekre kapjak eredményt, és ne minden mindennel végigpróbálva.
Remélem érthetően sikerült megfogalmaznom :D

(#5381) nyunyu válasza Pulsar (#5380) üzenetére


nyunyu
félisten

Mondjuk join feltételnek megadod mindkét mezőt AND-dal?

SQL-92 szintaxis:
select t1.*
from tabla1 t1
join temp t2
on t2.valami = t1.valami
and t2.masikmezo = t1.masikmezo;

Szabvány előtti ősrégi szintaxis:
select t1.*
from tabla1 t1, temp t2
where t2.valami = t1.valami
and t2.masikmezo = t1.masikmezo;

Utóbbit csak a nagyon régi DB gyártók (Oracle, Teradata), illetve az újabbak közül csak páran (MS SQL 2008-tól, MySQL?) ismerik csak.

Nagyon nagy (100k+ rekord) tábla esetén sokat lehet gyorsítani rajta, ha legalább az egyik joinolt oszlopon van index.
(Esetleg partícionálod a táblát az egyik kulcs mentén, de az már nagyon advanced megoldás, és nem minden ócó/ingyenes DB motor tudja)

[ Szerkesztve ]

Hello IT! Have you tried turning it off and on again?

(#5382) nyunyu válasza nyunyu (#5381) üzenetére


nyunyu
félisten

Sosem szerettem az ősrégi szintaxist, mert nem bírtam megjegyezni, hogy az Oracle a feltétel melyik oldalán várja a (+)-t a left illetve right joinnál.

select t1.*, t2.*
from tabla1 t1, tabla2 t2
where t1.id = t2.id (+);

Aha, amelyik oldal nem kötelező / lehet null, oda kell tenni a (+)-t.
Vagyis a fenti példa egy left join.

Arra meg egyáltalán nem emlékszem, hogy Teradatában volt-e ilyen left/right szintaxis.
Csak annyi rémlik, hogy update közben is tudott implicit joinolni, amit rajta kívül egyik DB motor sem ismert:

update tabla1
set valami = tabla2.valami
where id = tabla2.id

Szabvány SQL mindenesetre jóval olvashatóbb, mint ezek az elfajzott példák. :DDD

[ Szerkesztve ]

Hello IT! Have you tried turning it off and on again?

(#5383) Pulsar válasza nyunyu (#5381) üzenetére


Pulsar
veterán

Szia,

köszi a választ. :R
Én az ősrégit használom, anno így tanultam, és azóta így maradtam :D
Így gondoltam én is, de így nem az lesz, hogy t2 A oszlopában van egy találtat, meg a B oszlopban három, akkor így 3 eredményt fogok kapni? A - B1, A - B2 és A-B3-al is?

[ Szerkesztve ]

(#5384) sztanozs válasza Pulsar (#5383) üzenetére


sztanozs
veterán

Igen, viszont ha az elsőben van kettő, a másodikban meg három, akkor hatot fogsz kapni.
A1-B1
A1-B2
A1-B3
A2-B1
A2-B2
A2-B3

[ Szerkesztve ]

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#5385) Pulsar válasza sztanozs (#5384) üzenetére


Pulsar
veterán

igen, bár az elsőben ismétlődés nem lehet, mert egyedi azonosító. Egy azonosítóhoz tartozhat sok dátum, de én csak azt keresném ami mellette van. És persze előfordulhat olyan, hogy egy másik azonosítóhoz ugyan az a dátum van rendelve. Ezt szeretném kiszűrni, és csak úgy lekérdezni az adatokat, hogy csak a mellette lévő dátummal keressen
ez így baromság?

and (azonositok.ids = temp.column1 and azonositok.dates = temp.column2)

(#5386) sztanozs válasza Pulsar (#5385) üzenetére


sztanozs
veterán

hogy érted azt, hogy "mellette van"?
azt hiszem nem értem a problémát...

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#5387) nyunyu válasza Pulsar (#5385) üzenetére


nyunyu
félisten

Mivel AND-ot használsz a két oszlopra, így csak teljes egyezőséget enged.
Nem lesz Descartes szorzat.

Persze, ha a temp táblában háromszor van meg ugyanaz az id, dátum páros, akkor fel fog szorozni, de azt meg tudod szűrni egy distinct-tel.

Hello IT! Have you tried turning it off and on again?

(#5388) Pulsar válasza sztanozs (#5386) üzenetére


Pulsar
veterán

a keresendő adatom egy adatpár. van egy A és egy B oszlopom. Csak azokat az egyezőségeket keresem ami A oszlopban pl az egyes sorba van. Tehát A1-et B1-el. A elvileg nem ismétlődhet, de B igen.

nyunyu: rendben, köszi :) kb 10k sorom volt, és 7 darabbal lett több. Distinctet direkt nem írtam az ID-ra, mert állítólag az ID-ban nincs ismétlődés, de majd leellenőrzöm. :R

(#5389) bambano válasza nyunyu (#5382) üzenetére


bambano
titán

a postgresql ismereteid hiányosak :)

Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis

(#5390) nyunyu válasza bambano (#5389) üzenetére


nyunyu
félisten

Azzal még nem dolgoztam.

Hello IT! Have you tried turning it off and on again?

(#5391) Ispy válasza nyunyu (#5382) üzenetére


Ispy
veterán

Én sohasem tudtam mi a különbség a left és a right join között, én csak innert vagy leftet használok.

Ez nem csak a vizuális megjelenítőknek van, hogy a kapcsolt tábla melyik oldalán jelenjen meg a fő táblának?

"Debugging is like being the detective in a crime movie where you're also the murderer."

(#5392) Pulsar válasza Ispy (#5391) üzenetére


Pulsar
veterán

a left-ben a közös metszet, a right pedig a metszet nélküli nem?
ja hülyeséget beszélek, a metszet nélküli az ON :)

[ Szerkesztve ]

(#5393) nyunyu válasza Ispy (#5391) üzenetére


nyunyu
félisten

Szerintem sok különbség nincs köztük, ha megfordítod a táblák sorrendjét, akkor right lesz a left-ből, és fordítva :DDD

Nekem olyan logikátlannak tűnik, hogy egy kicsi vagy lyukacsos táblához joinoljak egy nagyobbat / tömöret, így én sem szoktam right joint használni, helyette mindig nagy táblához left join.

Hello IT! Have you tried turning it off and on again?

(#5394) nyunyu válasza Pulsar (#5392) üzenetére


nyunyu
félisten

Metszet nélküli az a left/right join is null-lal kombinálva.

select a.*
from tabla a
left join temp b
on b.id = a.id
where b.id is null;

Ez szerintem ekvivalens ezzel:
select a.*
from temp b
right join tabla a
on a.id = b.id
where b.id is null;

Ezeket a szörnyűségeket le se merem írni:
select a.*
from tabla a, temp b
where a.id = b.id (+)
and b.id is null;

select a.*
from temp b, tabla a
where b.id (+) = a.id
and b.id is null;

:DDD

[ Szerkesztve ]

Hello IT! Have you tried turning it off and on again?

(#5395) nyunyu


nyunyu
félisten

Egyáltalán a from után táblákat vesszővel felsorolós ősrégi szintaxist tanítják még valahol?

Mikor ~20 éve halogattam DB témájú tárgyakat a BMEn, akkor már csak a szabvány szintaxis Oracle és SQL Server implementációját mutogatták.

Legacy Teradata nyelvjárásba csak később futottam bele, amikor 10-15 éves ETL jobokat kellett visszafejtenem, és vizualizálnom.

Hello IT! Have you tried turning it off and on again?

(#5396) nyunyu


nyunyu
félisten

tripla :W

[ Szerkesztve ]

Hello IT! Have you tried turning it off and on again?

(#5397) nyunyu


nyunyu
félisten

dupla

Hello IT! Have you tried turning it off and on again?

(#5398) Ispy válasza nyunyu (#5393) üzenetére


Ispy
veterán

Nekem is. Mindig van egy kiinduló tábla, amiből jönnek a többiek szép sorban, először az innerek, aztán a leftek, így ránézésre látszik mit csinál a select, egy-két right és eret is vágnék magamon, amikor van vagy 20 tábla egy lekérdezésben.

"Debugging is like being the detective in a crime movie where you're also the murderer."

(#5399) DeFranco válasza Ispy (#5398) üzenetére


DeFranco
nagyúr

én messziről ugatom az SQL-t (selecteket kalapálok, de ennyi) de nekem semmi problémám nincs a left/right/inner stb. joinokkal, sőt aktívan kell is használni.

az persze más kérdés, hogy minden join lehet left ha ügyesen forgatom :D

[ Szerkesztve ]

(#5400) nyugis21 válasza Szmeby (#5379) üzenetére


nyugis21
kezdő

Köszönöm!

Sajnos megfertőztek coviddal, eltart egy ideig, amíg túlleszek rajta.:-(

Ráadásul a webbel is bajok vannak, levelező weboldalnak lejárt valami tanúsítványa, napok óta nem kapok leveleket, nagy nehezen be tudok lépni, küldeni tudok, de válaszok "kézbesíthetetlenek"?

yt-ről se tudom a videókat letölteni, még azokat se, amik korábban letölthetőek voltak, a letöltök nem találják a fájlt, vagy időtúllépés.:-(

Friss Nyugis - akinek nem hagynak nyugtot.:-(

Útvonal

Fórumok  »  Szoftverfejlesztés  »  SQL kérdések (kiemelt téma)
Copyright © 2000-2024 PROHARDVER Informatikai Kft.