Unikátní index a hodnoty NULL

Honza Pazdziora adelton na fi.muni.cz
Neděle Září 25 17:06:26 CEST 2005


On Sun, Sep 25, 2005 at 01:30:36PM +0200, Ing. Pavel PaJaSoft Janoušek wrote:
> 
> 	Představte si situaci, že máte jistou aplikaci která něco eviduje, a
> která se vůči novým záznamům chová tak, že je nejprve někdo musí schválit (=
> po schválení získá evidenční číslo apod.) a teprve pak je "vidět" v systému.
> Položky takového záznamu jsou různé povahy, některé se berou z číselníků.
> Pokud položka v číselníku neexistuje, doplní se nová, ale nikoli tak, že se
> doplní do tabulky s konkrétním číselníkem, ale samozřejmě stejně jako záznam
> podléhá schválení... - schvalovač může klidně přidání nového záznamu do
> číselníku zamítnout, ale kdyby to bylo v jedné tabulce, tak by se tato "nově
> nechtěně" přidaná položka číselníku mohla začít regulérně používát a už by z
> jiných integritních důvodů nešla odstranit = do okamžiku schválení nebude a
> nesmí být v číselníku.

[...]

> 	Tak - to by bylo OK a myslím si, že i formálně databázově čisté.
> Ovšem chci-li definovat další tabulkové omezení a sice takové, že je z
> hlediska systému docela nesmysl, aby se v tabulce návrhů vyskytovaly
> DUPLICITNÍ návrhy jsem v háji. Jde o to, že sice pomocí BTREE (nic jiného ty
> podmínky nepodporuje) mohu udělat unikátní index přes (ID položky, text
> návrhu), problém je, že VŠECHNY vložené záznamy odpovídající tabulkovému
> omezení (CHECK) budou z hlediska indexu VŽDY unikátní...
> 
> Mohu milionkrát vložit, že ID je NULL a text je "Pepa", stejně tak, že ID=20
> a text je NULL (ID=20, text je "pepa" vložit nejde z důvodu tabulkové
> kontroly) a to je problém, jehož řešení neznám a chtěl bych...

Asi jsem ne úplně pochopil, co se přesně chce, nicméně: V prvním
záznamu navrhují hodnotu Pepa. Ve druhé záznamu navrhuje někdo jiný
hodnotu Pepa. Jestli se jedná o toho samého Pepu, nebo jestli ve
finále po schválení do čísleníku půjde Pepa Novák odkazovaný ze
záznamu 1 a Pepa Novotný ze záznamu 2, by se přece nemělo rozhodovat
nad tou tabulkou návrhů. Od toho tam máte to ruční schvalování, aby
posoudilo, jestli dvě hodnoty, které vypadají stejně, také stejné
jsou, nebo nikoli ...

Možná kdybyste dal kompletní sadu SQL operací, které ještě mají projít
a které už ne, vyjasnilo by to, co vlastně potřebujete.

-- 
------------------------------------------------------------------------
 Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
 .project: Perl, mod_perl, DBI, Oracle, large Web systems, XML/XSL, ...
		Only self-confident people can be simple.


Další informace o konferenci Databases