Neomezeňe variant k záznamu   zodpovězená otázka

Databáze

Zdravím,

do teď jsem tady hledal způsoby řešení (popis cesty), ale teď jsme se dostal do malého rpoblému:

do tabulky s žákama potřebuji dostat k žákovi, jaké kroužky navštěvuje (těch může být neomezeně) a netuším jak toto uložit do tabulky. Aby to nebylo tak jednoduché, tak můźe chodit do sportovních, nebo jazykových...

Mám tabulku žáci (adresa, tel, vek, trida... Varianta1, Varianta2)

tabulku Varianta 1 (kde je seznam sportovnichkrouzku)

tabulka Varianta 2 (seznam jazykovych krouzku)

1) jak to tedy ukladat?

2) jak na asp.net stránku dostat tablku s checkboxy pro jednotlivé varianty (krouzky)?

díky moc za radu. nic mne nenapadá (krom varianty každého žáka mít Xkrát podle kroužků, a pak ho nějak třídit což je šílenost)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Použijte tzv. vazební tabulku - to bude nejjednodušší řešení.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Já bych to řešil třetí tabulkou přes kterou propojíte tabulku s žáky a tabulku s kroužky (přestě tak jak to je napsáno v příspěvku nademnou).

Dám příklad.

- máte 3 tabulky

- v první jsou žáci (každý jednou) s unikátním ID

- ve druhé tabulce máte seznam kroužku (každý je zde zase jednou a má unikátní ID)

- do třetí tabulky uložíte ID žáka z první tabulky a ID kroužku ze druhé tabulky. Pokud žák navštěvuje více kroužků, vložíte pro daného žáka do této třetí dabulky další záznam. To ale nevadí protože vkládáte pouze jeho ID, údaje jako jméno nebo adresa budou pořád fyzicky v databázi uložené pouze jednou v první tabulce, takže když bude potřeba něco změnit, máte všechno na jednom místě.

Myslím si že je i zbytečné mít podle kategorií kroužku 2 tabulky (pokud by jste to tak udělal, budete muset hlídat aby Vám v těchto dvou tabulkách nedošlo ke konfliktu PK pokud by jste to propojoval přes vazební tabulku jak jsem popisoval výše). Dal bych to všechno do jedné tabulky a pokud potřebujete mít rozdělení na jazykové, sportovní atd. kroužky, přidal bych do tabulky s kroužkama další sloupeček s ID skupiny. Uděláte si vedle další tabulku kde budou názvy těchto skupin a propojíte to přes relaci.

Co se týká checkboxů tak s ASP.Net moc zkušenosti nemám, ale pokud bych to řešil ve winform aplikaci tak bych místo checkboxů použil listBox kam bych všechny dostupné kroužky načetl a ve vlastnostech se dá nastavit aby na každém řádku byl checkbox. Tím by se problém vyřešil. Možná by to stejně šlo řešit i v ASP.Net

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Díky za perfektní odpověď :)

jenom pro jistotu: ve třetí tabulce bude

IDZaznamu-IDZAKA-IDKrouzku

1-Aj-Petr

2-Nj-Petr

3-Fr-Petr

4-fotb-Petr

Kroužky a Jména budou pomocí ID z tabulek

Vypis zaka potom bude cca

select ALL from TretiTabulka WHERE IDZAKA=Petr

Ten druhy dotaz je spíš k ASP.NET než k SQL... zkusim to nejak poresit...

Ohledně těch relací... nějak nejsem schopný je pochopit/dát dohromady (nebo aspoň pochopit jak ty vazby fungujou) nějaký článek třeba odsud by nebyl ;)??

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jen takový detail, ty ID bych dával jako integer. Tzn.

První tabulka se žákama:

Id=1

Jmeno='Petr'

Prijmeni='Novák'

==================================

Druhá tabulka s kroužkama:

Id=1

Nazev='Kreslení'

ID_skupiny=1

Id=2

Nazev='NJ'

ID_skupiny=2

Id=3

Nazev='AJ'

ID_skupiny=2

===================================

Třetí tabulka se jmény skupin (id v této tabulce bude v relaci s ID_skupiny v předchozí tabulce):

Id=1

Nazev='Vytvarný'

Id=2

Nazev='Cizí jazyk'

====================================

A teď když budete chtít říct že Petr chodí na němčinu i kreslení tak vložíte 2 záznamy do propojovací tabulky. Ale vložíte pouze ID těch záznamů. Když pak budete potřebovat změnit někde nějaký název tak to změníte na jednom místě a změna se projeví všude:

ID=1

ID_zaka=1

ID_krouzku=1

ID=2

ID_zaka=1

ID_krouzku=2

Ohledně toho tutoriálu, podívejte se sem: http://www.vbnet.cz/serial--7-stoparuv_p...

je zde pěkně popsaný úvod do databází.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Díky moc, přesně takhle jsem to měl na mysli...

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback