Key/Value pairs v relační databázi   otázka

SQL, Databáze

Zdravím,

řeším jeden zajímavý logický problém...

Mám tabulku TABLE1 kde jsou data.

TABLE1 obsahuje sloupec s odkazem na TABLE2 - relace 1:N.

CREATE TABLE TABLE2 (

KLIC int,

HODNOTA nvarchar...

);

V současné době mám v DB ideální stav pro optimaliaci rychlosti (integer KLÍČE) a žádné duplicity.

A tady nastává problém...

Potřebuji nyní KLÍČE použít v programu (C#; ideálně jako enumerátory pro podmínky switch, if apod.) a nechci dělat enumerátory databázovým ID číslem (mohou se v DB měnit) a raději bych je dělal kódem, tj.:

CREATE TABLE KeyValue (

KLIC int,

NEMENNY_KOD varchar...,

HODNOTA varchar...

);

Teďka mám zbytečně vedený KLIC a NEMENNY_KOD v TABLE2, protože vždy se jedná o "unikátní hodnotu"... s tím, že pokud mám NEMENNY_KOD, tak:

- do TABLE1 můžu ukládat NEMENNY_KOD misto čísla (prasárna)

- v kódu (C#) stačí vždy testovat if(neco.ToUpper() == "NEMENNY_KOD")... - nepřijde mi ideální možnost

Zajímalo by mně, jak řešíte číselníky (Key/Value pairs v relační databázi) tak, aby jste je měli vždy k dispozici v programu v aktuální podobě (např. pro testování podmínek apod.)

Ukázka:

a)Data v DB (Entity-Attribute-Value model rozšířen o datový typ KEY hodnoty kvůli konverzi datových typů v C#):

INSERT INTO KeyValue (id, key, value, KeyType) VALUES (101, 'color', 'green', 'String');

INSERT INTO KeyValue (id, key, value, KeyType) VALUES (102, 'color', 'blue', 'String');

INSERT INTO KeyValue (id, key, value, KeyType) VALUES (103, 'cislo', 123, 'Int32');

b)Podmínka v programu

foreach(DataRow...

if(MojeHodnota = ColorZelenaFromDb.ToUpper())

{...

Poznámka:

Dopátral jsem se zajímavého vzoru: "Entity-Attribute-Value" ale:

Some of the problems with Entity-Attribute-Value are:

-No way to make sure keys are spelled the same for all items

-No way to make some keys mandatory for all items (i.e. NOT NULL in a conventional table design).

-All keys must use VARCHAR for the value; can't store different data types per key.

-No way to use referential integrity; can't make a FOREIGN KEY that applies to values of some keys and not others.

-Basically, Entity-Attribute-Value is not a normalized database design.

více: http://stackoverflow.com/questions/51460...

Děkuji, Petr

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