| | |
| Stránka: 1 z 1
| [ Príspevkov: 9 ] | |
Autor | Správa |
---|
Registrovaný: 01.09.14 Prihlásený: 28.11.15 Príspevky: 22 Témy: 6 |
Zdravím, riešim problém kde mám dve tabuľky výrobok a skúšku1. Na prepojenie je použitá tkzv. generalizácia čiže primárny id atribút tab. skúška1 získa cudzí kľúč od tab. výrobok a dedí jej atribúty. Avšak chcela som aby pole výrobok ešte obsahoval jeden atribút ktorý by pripočítaval číslo výrobku (nie id) a po začatí ďalšieho roku začal počítať odznova. Na internete som našla riešenie ako toho dosiahnuť: Kód: CREATE TABLE vyrobok( year_id INT(11) NOT NULL, -- combination of year id INT(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (yearmonth_id, id) ) ENGINE = MYISAM; takto to v poriadku funguje avšak keď chcem tento kód spojiť s tabuľkou skúška1.. resp. prepojiť cudzím kľúčom napr. id.. potom mi to nefunguje a id sa pripočítava postupne aj keď dám iný rok. Preto som skôr hľadala riešenie že by som pridala ďalší stĺpec auto_increment ale mi to vypisuje chybu že nemôžem mať dva atribúty auto_increment a vypisuje mi chybu že sa nedá prepojiť s cudzím kľúčom tabuľka skúška1. Som bezradná, možno riešením by bolo vytvoriť ďalšiu tabuľku z ktorej by som tieto čísla volala ale chcela som to nejakou jednoduchšou cestou. Ďakujem za všetky odpovede!
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 Bydlisko: Bratislava |
Z uvedenej struktury tabulky nevyplyva ziadny mechanizmus navysovania a resetovania cisla vyrobku v zavislosti od roku. Tuto funkcionalitu riesis na urovni aplikacie alebo databazy? A este podotazka: Na co chces to cislovanie pouzit?
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 13.11.07 Prihlásený: 20.08.16 Príspevky: 1702 Témy: 0 | Napísal chrono: 08.04.2015 15:03 | |
|
To je vlastnosť MyISAM a BDB tabuliek ak sa auto_increment použije na sekundárny kľúč. Každopádne netuším, ako by malo fungovať to prepájanie s inou tabuľkou, keďže id v takom prípade nie je jedinečné (a vlastne netuším, čo presne sa pokúša Mirusena urobiť).
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 Bydlisko: Bratislava |
Ano, to mi je jasne, len ta struktura nesedi s textom. Pouziva year_id, potom zasa yearmonth_id, chce mat na cislovanie ine pole ako id, ale nic take v rieseni nema... Popis je chaoticky, ze sa v tom ani diva svina nevyzna.
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 01.09.14 Prihlásený: 28.11.15 Príspevky: 22 Témy: 6 | Napísal autor témy Mirusena: 09.04.2015 0:17 | |
|
Tento kód som našla na internete z tohoto linku: http://stackoverflow.com/questions/7902132/auto-increment-every-month-start-from-1-in-mysql-with-php a pôvodne tam bolo navyšovanie sa id každý mesiac , ja som to zmenila na každý rok a zabudla som to tu v primárnom klúči prepísať . V podstate takto to funguje že každý rok sa mi začne pripočítať id od 1. Môj problém aby ste pochopili: mám viac tabuliek "skúška1 - skúška n" , vzhľadom na to že mali všetky skúšky veľa rovnakých atribútov, aby som ich nemusela zbytočne vpisovať vytvorila som si tabulku "vyrobok" kde sú všetky spoločné atribúty skúšok a vytvorila som reláciu (generalizáciu), čiže po namodelovaní v datamodelery výsledný sql kód vyzeral tak, že skúškam pridal primárny kĺúč ID_vyrobok, ktorý sa stal zároven cudzím kľúčom k tabulke výrobok(ID_vyrobok). Len chcela som že by som si pridala do výrobku atribút napr. to year_id ako auto_increment a po roku by sa zresetovalo a pripočítavalo od 1 (ide o skúšky výrobkov kde pre každý rok sa začína id skúšiek od 1, do výrobku chcem pridať tento atribút lebo je to hlavná tabulka odkiaľ berú tabulky skúšky atribúty). Avšak keď vytvorím tabulku výrobok aj s tým year_id (ako som uviedla v kóde) všetko funguje... každý rok ked zadám, resetne sa autoincrement a začne opäť od 1 avšak keď som chcela toto všetko prepojiť s mojím výsledným sql kódom z datamodeleru tak to nefungovalo. Chcela som vytvoriť tabulku vyrobok ktorá by mala atribúty Kód: CREATE TABLE vyrobok( ID_VK int(11) NOT NULL AUTO_INCREMENT, year_id INT(11) NOT NULL, -- combination of year id INT(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (ID_VK,year_id, id) )ENGINE = MYISAM; a vytvoriť tabulku skúška: Kód: CREATE TABLE skuska1( ID_VK int(11) NOT NULL primary key, foreign key(ID_VK) references by vyrobok(ID_VK) ) lenže tu mi vyskakuje vždy chyba že nemôžu byť 2 autoincrement atrubuty v tabulke, a hlavne nedá sa mi prepojiť cudzí kluč ... Ospravedlňujem sa že je to chaotické, hádam ste pochopili čo myslím
|
|
Registrovaný: 13.11.07 Prihlásený: 20.08.16 Príspevky: 1702 Témy: 0 | Napísal chrono: 09.04.2015 10:41 | |
|
Nerobí sa to tak, že v tej tabuľke vyrobok nebudeš mať to ID_VK, a pri tabuľke skuska1 pri foreign_key použiješ (year_id, id)? (a teda bude musieť mat dva stĺpce, do ktorých sa to year_id a id uloží)
|
|
Registrovaný: 01.09.14 Prihlásený: 28.11.15 Príspevky: 22 Témy: 6 | Napísal autor témy Mirusena: 09.04.2015 11:42 | |
|
Tak som to skúšala ale potom sa mi už year_id po každom novom roku neresetuje na 1 ale pokračuje normálne auto_increment ďalej.
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 Bydlisko: Bratislava |
Tak pouzi na resetovanie trigger, ak chces mat nastaveny auto_increment na iny stlpec
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 13.11.07 Prihlásený: 20.08.16 Príspevky: 1702 Témy: 0 | Napísal chrono: 09.04.2015 13:21 | |
|
Čo má spoločné zvyšovanie hodnoty stĺpca id v tabuľke vyrobok s tým, že sa stĺpce použijú na prepojenie s inou tabuľkou? (pretože veľmi pochybujem, že by sa auto_increment správal inak, keď sú stĺpce použité ako kľúče pri inej tabuľke a inak, keď nie sú)
Ako tam vlastne pridávaš nové záznamy?
// Spojený príspevok Štv 09.04.15 14:01
Takže som nainštaloval MySQL a správa sa to presne, ako som čakal (a teda id sa zvyšuje nezávisle pre každý rok a je úplne jedno, či je to prepojené s inou tabuľkou, alebo nie). Takže čo presne s tým robíš?
|
|
| Stránka: 1 z 1
| [ Príspevkov: 9 ] | |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|