
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.
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.