Zadání

Databáze v CSV

Cvičení

Soubory a souborový systém

SSŠVT

Mini-projekt: Správa CSV databáze s jedním business objektem

Zadání

Zvolte si svoji oblíbenou entitu. Pro inspiraci:

Definujte v C# business objekt vhodný pro tuto entitu. Jeho třída by měla mít anglický název a ten název by měl mít velké počáteční písmeno.

Vytvořte konzolovou aplikaci, která bude umět spravovat databázi vašich business objektů. Implementujte tzv. CRUD metody:

Nezapomeňte na validaci vstupu!!!

Databází se zde myslí textový soubor ve formátu CSV. Po každé změně dat v paměti (operace C, U, D) se tato zapíší do souboru.


Operace CRUD a jazyk SQL

Operace CRUD mají velmi blízko k jazyku SQL a úzce s ním souvisí. Aby byla jasnější jejich implementace, uvažujme velmi jednoduchý business objekt Person, který má pouze dvě vlastnosti Name a Age.

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}
        

V relačních databázích, jako jsou např. MS SQL Server nebo MySQL/MariaDB, je dobré mít u každé tabulky definovaný umělý primární klíč (IDčko), nejlépe typu INT a který se sám inkrementuje při přidání nového řádku.

Tady je definice tabulky PERSON, jak by vypadala v dialektu SQL pro MS SQL Server:

CREATE TABLE PERSON
(
    ID          INT           IDENTITY(1,1)       NOT NULL,
    NAME        NVARCHAR(50)                      NOT NULL,
    AGE         INT                               NOT NULL,

    CONSTRAINT PK_PERSON  PRIMARY KEY ( ID )
);
        

Každá z operací CRUD pracuje s jediným řádkem tabulky.

Operace CREATE vloží do tabulky nový řádek. V jazyce SQL použijeme INSERT. Takže například:

INSERT INTO
  PERSON
  (
      NAME,
      AGE
  )
  VALUES
  (
      N'Anita',
      23
  )
;
        

O sloupec ID se nemusíme starat. Hodnotu do něj za nás vloží SQL Server (díky IDENTITY v definici tabulky).

Operace READ načte data o jednom řádku. V jazyce SQL použijeme SELECT. Řekněme, že chceme zjistit detaily o osobě s ID = 3. K tomu použijeme následující SQL dotaz:

SELECT
  ID,
  NAME,
  AGE
FROM
  PERSON
WHERE
  ID = 3
;
        

Operace UPDATE uloží aktuální data o jednom řádku (aktualizuje např. jméno a/nebo věk) do tabulky. Aby bylo jasné, který řádek se má aktualizovat, použijeme opět sloupec ID. Řekněme, že chceme přejmenovat osobu s ID = 2 na "Jan" a nastavit jí věk 36 let. V jazyce SQL použijeme stejnojmenný UPDATE:

UPDATE
  PERSON
SET
  NAME  = N'Jan',
  AGE   = 36
WHERE
  ID    = 2
;
        

Operace DELETE smaže zvolený řádek z tabulky. Řádek ke smazání vybereme opět pomocí sloupce ID. Dejme tomu, že chceme smazat řádek s ID = 1. V jazyce SQL máme k dispozici rovněž DELETE:

DELETE
FROM
  PERSON
WHERE
  ID    = 1
;
        

Hinty

Pro udržování aktuálního stavu dat v paměti použijte datovou strukturu seznam (List<T>).

Pro zobrazení na konzoli a "dojem" interaktivity použijte Console.SetCursorPosition.

Pro interaktivní řízení výběru řádku (objektu ze seznamu), se kterým chcete něco udělat (upravit, smazat apod.), použijte Console.ReadKey. Pohyb v seznamu pak můžete řídit např. kurzorovými klávesami Up a Down.

Pro vstup od uživatele při zadávání hodnot použijte Console.ReadLine.


Pro představu

Pro představu, jak by měla tato mini-appka vypadat, přikládám pár screenshotů:

Create new object
Browsing A
Browsing B