- From: Eric Prud'hommeaux <eric@w3.org>
- Date: Fri, 18 Feb 2011 12:04:10 -0500
- To: Ivan Herman <ivan@w3.org>
- Cc: Alexandre Bertails <bertails@w3.org>, Juan Sequeda <juanfederico@gmail.com>, RDB2RDF WG <public-rdb2rdf-wg@w3.org>
* Ivan Herman <ivan@w3.org> [2011-02-18 17:49+0100]
>
> On Feb 18, 2011, at 17:32 , Eric Prud'hommeaux wrote:
>
> > * Ivan Herman <ivan@w3.org> [2011-02-18 11:40+0100]
> >> Alex,
> >>
> >>
> >> On Feb 17, 2011, at 16:18 , Alexandre Bertails wrote:
> >>
> >> [snip]
> >>>
> >>> Sorry, I did not understand your comment this way as I think that the
> >>> type is already correct.
> >>>
> >>>> But does that specification means that for every table t, primaryKey(t) will give me a set s=primaryKey(t) where size(s)<=1? Ie, that, for every table, the primaryKey is either empty or restricted to one single column? That is the discrepancy with section 2.2 that explicitly speaks about multi-column primary keys...
> >>>
> >>>> From you comment:
> >>> s/the primaryKey is either empty or restricted to one single column/the primaryKey is either empty or restricted to one single CandidateKey/
> >>>
> >>
> >> Sorry, right
> >>
> >>> So primaryKey's type tells you that primaryKey gives you either 0 or 1
> >>> CandidateKey. The definition for CandidateKey is
> >>> [[
> >>> CandidateKey ::= List(ColumnName)
> >>> ]]
> >>>
> >>> So you do have multi-columns for a Primary Key (if there is one).
> >>>
> >>> Am I getting it right? I may be not introducing this one the right way.
> >>>
> >>
> >> I think I get it now but... why do I need this? Why not define
> >>
> >> primaryKey : Table → CandidateKey
> >
> > I think this would say there is exactly one primary key per table.
>
> Hm. Indeed, one primary key, though that primary key would consist, possibly, of several columns. Isn't this what we want? I am really confused:-(
What we want is zero or one primary key with 1 or more columns, which I believe is captured by
candidateKeys : Table → {l:List(CandidateKey) | size(l) ≥ 1}
primaryKey : Table → {s:Set(CandidateKey) | size(s) ≤ 1}
(I added a size constraint on CandidateKey and note that a Set of 0 or 1 is the same as a List of 0 or 1.)
> Ivan
>
>
> >
> >> or is a List necessarily non-empty, ie,
> >>
> >> CandidateKey ::= List(ColumnName)
> >>
> >> means that there _is_ at least one column (ie, the no primary Key alternative would not be covered?)
> >
> > I read this as saying there are 0 or more primary keys, and, including the specification "size(s) ≤ 1" gives us 0 or 1 primary keys, modelling an optional without inventing a new type.
> >
> >> Ivan
> >>
> >> ----
> >> Ivan Herman, W3C Semantic Web Activity Lead
> >> Home: http://www.w3.org/People/Ivan/
> >> mobile: +31-641044153
> >> PGP Key: http://www.ivan-herman.net/pgpkey.html
> >> FOAF: http://www.ivan-herman.net/foaf.rdf
> >>
> >>
> >>
> >>
> >>
> >
> >
> >
> > --
> > -ericP
>
>
> ----
> Ivan Herman, W3C Semantic Web Activity Lead
> Home: http://www.w3.org/People/Ivan/
> mobile: +31-641044153
> PGP Key: http://www.ivan-herman.net/pgpkey.html
> FOAF: http://www.ivan-herman.net/foaf.rdf
>
>
>
>
>
--
-ericP
Received on Friday, 18 February 2011 17:04:46 UTC