Re: 3 value logic. Why is SQL so special?
Date: 13 Sep 2006 05:35:48 -0700
Message-ID: <1158150948.102584.22030_at_h48g2000cwc.googlegroups.com>
David Portas wrote:
> Alexandr Savinov wrote:
> >
> > So if you put Actual_Departure_Time in table A, B, C or whatever other
> > table you find appropriate then it will still describe entities from
> > Flights table (if linked appropriately of course). Moreover, formally
> > these alternative schemas are equivalent (again, if we link the tables
> > appropriately).
> >
>
> What model is that? Relational tables are not "linked" other than in
> the conceptual sense that their propositions describe some subsets of
> the same reality.
>
>
> > In this sense there are two extremes:
> >
> > 1. putting all the data in one wide table (a kind of canonical
> > representation), and
> >
> > 2. putting all the data in separate tables (a kind of "one table - one
> > attribute" approach)
> >
> > In the first case all absent attributes will (have to) be denoted by
> > nulls. In the second case the absent attributes are denoted by the
> > physical absence of the records. From the point of view of users (data
> > semantics) nothing changes.
>
> Again, a model without nulls cannot be equivalent to one with nulls.
> One represents information as values in relations and the other does
> not. From the user's point of view *everything* changes - that after
> all is the essence of the OP's question.
>
>
> > Real world schemas are normally somewhere in between because both
> > extreme designs are not efficient: the first due to space, the second
> > because of time.
> >
>
> If the models were truly equivalent then in principle they could have
> the same physical representation and therefore any hypothetical
> difference in storage space and efficiency would disappear.
>
> --
> David Portas
I normally just read CDT rather than posting, but I think Alexandr is
getting at the fact that the following two models are notionally
equivalent:
(Apologies for posting SQL here, it's closer to how I think than
relations, plus I've more experience creating examples in it. Hopefully
you guys can translate)
Model 1:
Create table PartA (KeyColumn int not null, DataColumn1 datetime not
null);
Model 2:
Create table PartB (KeyColumn int not null, DataColumn2 datetime not
null);
Create view PartNullable(KeyColumn,DataColumn1,DataColumn2) as select
KeyColumn,DataColumn1,DataColumn2 from PartA full outer join PartB on
PartA.KeyColumn = PartB.KeyColumn;
Create table PartNullable(KeyColumn int not null, DataColumn1 datetime
null, DataColumn2 datetime null);
Create view PartA(KeyColumn,DataColumn1) as select
KeyColumn,DataColumn1 from PartNullable where DataColumn1 is not null;
Create view PartB(KeyColumn,DataColumn2) as select
So if you're needing to perform operations considering both DataColumn1 and DataColumn2, you have to accept that one or other may be absent.
Of course, all of the above is purely from a practical perspective, whereas this is comp.databases.THEORY, so I guess I should just shut up and go back to lurking.
Damien Received on Wed Sep 13 2006 - 14:35:48 CEST