Re: Extending my question. Was: The relational model and relational algebra - why did SQL become the industry standard?

From: Mikito Harakiri <>
Date: Thu, 13 Feb 2003 17:57:14 -0800
Message-ID: <m7Y2a.18$>

"Steve Kass" <> wrote in message news:b2h9jb$p0h$
> I didn't read the whole thread, but in the right context, the
> bags are functions, and intersect, union, etc. are all well-defined.

I don't agree that the matter is "context dependent". One either has a model with a consistent set of operations that users like, or not.

> Definition: A multiset M over a domain U is a function with
> domain U and range the set of non-negative integers.
> We say that the element x is in M if M(x) > 0.
> We say that the element x appears in M with multiplicity k, if M(x) = k
> We say that M = M' for two multisets M and M' on domains U and U'
> respectively if M(x) = M'(x) for all x in the intersection of U and U' and
> M(x) = 0 when x is not in U, and M'(x) = 0 when x is not in U'.
> Functions are well-defined in terms of sets also, subsets of U x Z where
> (x,n) and (x,m) both in a function f implies n = m (single-valuedness).
> It makes no sense to take the union of two functions, but it does make
> to take the sum (union all), min (intersection), and other operations.

Union is redundant in multiset model anyway. It is a distinct "union all". "Distinct" is a grouped aggregate.

> Just define things carefully and it's all much easier. If you think the
> intersection
> of two multisets, one containing two S's and one containing 3 should be a
> multiset containing 6 S's, then see if it the product operation f*g(x) =
> f(x)*g(x)
> has useful properties for modeling the real world.

With my definition

select name from e1
select name from e2

is identical to

select from e1, e2
where =

This is not true with the "min" definition.

> I don't see why you
> would
> call something like that intersect, though.

See the above.

> As for what laws hold for multisets, you just go figure out which ones do.

Found one that doesn't hold for multisets:-(

select from (

   select, from emp e1, emp e2 )

is not the same as

select name from emp

More concisely:

PROJECT*POWER != 1 Received on Fri Feb 14 2003 - 02:57:14 CET

Original text of this message