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
|