
Databáze ve Visual Studiu
Zdravím,
pro svůj projekt si tvořím databázi ve Visual Studiu 2015 a potřeboval bych poradit. A to s tím, jak mezi tabulkami vytvořit relační vzathy 1:1, 1:n, m:n. Spíše by bylo dobré nějaké příklady. Díky. :)
Co znamená, že si vytváříš databázi? Vytváříš si přímo tabulky? Nebo třeba používáš CodeFirst v EntityFrameworku? Nebo i něco jiného?
Ano, vytvářím si tabulky a pak tu databázi chci připojit k asp .net aplikaci a pomocí EF...no s tím už si poradím. Jen nevím jak na ty vazby :/
Tabulky vytvaris primo v kodu nebo v nejakem DB navrhari?
Vazby mezi tabulkami se vytvari pomoci referencni integrity (foreign keys). Syntaxe zalezi na konkretni databazi.
Ono je to v jednom okně jak kód, tak tabulka.
Tak stačí správně nastavit cizí klíče a je to.
No, ta vazba m:n se jen cizím klíčem nevyřeší ... je nutno použít "pomocnou" tabulku.
Která se s ostatními prováže pomocí cizích klíčů.
Jen pro kontrolu, zda to dělám správně. Mám například tabulky Ucitel(IdUcitele, Titul, Jmeno, Prijmeni) a Cviceni(IdCviceni, Text) a chci, aby mezi těmito tabulkami byla vazba 1:n (Ucitel (1) : Cviceni(n)). V kódu jsem to napsal takto: CONSTRAINT [FK_Ucitele_Cviceni] FOREIGN KEY ([IdUcitele]) REFERENCES [Cviceni]([IdCviceni]).
Je to správně? Nebo jak jinak by to mělo být?
IdUcitele se má odkazovat na ID učitele v tabulce učitelů.
V tabulke cviceni ti chyba stlpec IdUcitele
A potom v tabulke cviceni urobis:
Constraint fk_cviceni_ucitel foreign key (IdUcitele) references ucitel(idUcitele)
A len tak minochodom. Nazvy stlpcov sa nesklonuju. Takze IdUcitel alebo este lepsie UcitelId.
Díky moc! :)
Ještě dotaz, když budu chtít vytvořit vztah m:n, tak si vytvořím pomocnout tabulku, tam dva sloupce, pro které ty tabulky spojuji a z první tabulky do pomocné tabulky vytvořím vazbu 1:n a z ní n:1 do druhé tabulky?
Ano. Pre tvoj priklad ucitel-cvicenie.
Spravis si tabulku UcitelCvicenie, ktora bude obsahovat 2 stlpce: UcitelId a CvicenieId.
UcitelId sa bude referencovat na UcitelId z tabulky ucitel a CvicenieId na CvicenieId z tabulky Cvicenie.
Taktiez je vhodne si spravit unique index na danu dvojicu stlpcov v pomocnej tabulke.
Ok, vyzkouším. Děkuju.
S tebou to bude těžké.
Nebavíme se o formuláři, který obsluhuje editaci záznamů v databázi, ale o vlastním návrhu databáze. Tam se dělají vazby a definuje referenční integrita.
Takže kromě programování si nejprve nastuduj DB design pro svůj databázový engine. Zatím jsi neprozradil,. co hodláš používat, jestli MySQL, MS SQL, SQL Lite, ...
Myslím, že je to SQL. Ale nejsem si jistý. Když klasicky ve Visual Studiu dáš New Project -> vlevo vybereš SQL Server -> SQL Server Database Project.
ked vytvoris SQL Server Database project, tak je to len o tom, ze v nom mozes vytvarat scripty tabuliek, procedur, funkcii a views. Ma to vyhodu v tom, ze kod databazy mozes mat zahrnuty v source control managemente (Git, TFS) a zaroven ti to zjednodusuje deploy na SQL Server.
Samotne tabulky si ale v tom projekte musis vytvorit ty. Klasicky pravym tlacidlom na projekt a vyberies moznost Add > Table. Potom si napises script tabulky, kde zaroven mozes pisat cudzie kluce. Tieto cudzie kluce predstavuju jednotlive vazby medzi tabulkami.
Díky za ujasnění! Ještě dotaz. Pokud tento vytvořený SQL Server Database Project připojím k asp .net aplikaci může teda fungovat a být použit jako databáze ano? Samozřejmě jen jako ukázková na lokálním pc. Někde na net na server bych musel zajistit nahrání databáze a její migraci.
Jinak postup jsem našel tady
Samotny SQL Server Database Project k ziadnej asp .net aplikacii nepripojis. Projekt sluzi len na vytvorenie "kodu" databazy a jeho nasledny deploy na SQL Server - napriklad aj tvoj lokalny ak ho mas vo svojom PC nainstalovany.
Ide o prerekvizitu pre entity framework. Ked si vsimnes ten postup, ktory si sem linkol, tak ma pokracovanie.
Ked uz spravis deploy databazy, tak spravis vo visual studiu dalsi projekt (napriklad MVC Web), ktoremu das do referencii entity framework. Entity framework ma "wizarda", ktory z databazy na tvojom lokalnom SQL Serveri, ktoru si vytvoril pomocou toho database projectu, vygeneruje C# triedy (tzv. model). Tie nasledne budes v kode pouzivat na komunikaciu s DB.
Jakto? V tom návodu tento SQL Server Database Project přímo k asp .net aplikaci připojuje a i já jsem to zkoušel a funguje to. Vytvořil jsem si CRUD v asp .net aplikaci a data se normálně ukládají do tabulek a funguje to.
Jo, přes entity framework jsem to dělal. A tak jak říkáš jsem si vygeneroval model pro tabulky.
Když né teda tímto způsobem, tak jak jinak to udělat? Tento způsob normálně funguje.
To, ze ti to funguje je super. Postup si teda urobil spravne. Problem je, ze nerozumies tomu, co robis. Len ides surovo bod po bode z toho navodu.
Hlavne nechapes rozdiel medzi SQL Server Database Project-om a Databazou v SQL Serveri.
SQL Server Database Project je len kod, ktory ked "zbuidujes", tak sa ti vytvori databaza v SQL Serveri. A Entity framework az z tejto databazy robi model. To je cele co sa ti snazim vysvetlit. EF to nerobi z toho database projectu, ale uz priamo z realnej databazy.
Díky za ujasnění. No právě proto se ptám, abych to věděl. :)
Takže jsme zase vlastně na začátku naší diskuse, že to je databáze. V projektu si ji navrhnu, podle návodu zbuilduju, napojím na asp .net aplikaci a ta už komunikuje s databází samotnou.
Co za kódování používáte, aby v databázi šly české znaky? Našel jsem nastavení při kliknutí na projekt pravým Properties -> Project Settings ->Database Settings -> Database Collation. Je jich tam moc a nevím kterou vybrat.
UTF-8
To tam právě není :/
Jo aha, ty se sice ptáš na kódování, ale "cestu" tam máš pro Collation, tedy v podstatě pořadí znaků v abecedě. Můžeš tam dát třeba "CZECH_CI_AS".
No jiné jsem tam nenašel. Nebo kde se dá nastavit kódování?
Zdá se, že MSSQL používá standardně UCS-2 a nejde to změnit. Takže to ani nemusíš řešit.
Stačí teda když nastavím to Collation jo? Protože se mi stalo, že v aplikaci napíšu nějaký text s českými znaky a v databázi vidím text bez diakritiky.
A byla to MSSQL databáze?
Nejspíš ano. Bylo to to samé jak tady popisuji, dělané ve visual studiu.
Tak zkus a uvidíš, fungovat by to mělo.
Vyzkoušel jsem a nefunguje. Z českých znaků funguje jen "šžýáíé" tak, jako předtím :/
Při vytváření instance serveru a pak i databáze určuješ collation (kódovou stránku) pro databázi. Ta se pak mění hodně těžko. A pokud máš collation u DB jinou než u instance SQL serveru na kterém databáze běží, budeš mít problém s temp tabulkami, které se vytváří jen v paměti v TEMPDB - ta má kódovou stránku danou instancí.
Takže s tím souvisí i to, že budeš DB deployovat na nějaký server a měl bys vědět, jak je server nastavený. Když neřekneš jinak, tak se ti ta databáze vytvoří s tou samou kódovou stránkou jako instance na serveru.
Proč děláš něco, k čemu o čem nevíš ani úplné základy a nejevíš snahu si o tom něco přečíst?
Nevíš ani jakou databázi vytváříš, jediné co víš je, že to děláš ve Visual Studiu
Dejme tomu, že DB běží na MS SQL. Spusť (případně před tím si nainstaluj) SQL management studio, podívej se na collation databáze (dá se to zvládnout i z kódu pomoci SQL dotazů), stačí nakouknout do MSDN.