- From: Richard Cyganiak <richard@cyganiak.de>
- Date: Thu, 25 Aug 2011 13:28:55 +0100
- To: Juan Sequeda <juanfederico@gmail.com>
- Cc: public-rdb2rdf-wg@w3.org
On 23 Aug 2011, at 23:53, Juan Sequeda wrote:
> HOWEVER, honestly, this in a way can be seen as a hack.
I wouldn't call it a hack. The two properties -- one based on a column, one based on a foreign key -- are two different things, so it's reasonable to model them as two different IRIs.
Quoting AWWW:
[[
Constraint: Assign distinct URIs to distinct resources.
]]
http://www.w3.org/TR/webarch/#id-resources
> We would be
> sticking the semantics inside the IRI which is really weird.
> Nevertheless, it works.
No, we wouldn't be sticking the semantics inside the IRI. We would just give two different names to two different things.
> I would still like to hear more use-cases and motivations to why we
> should generate a literal triple for foreign key columns. From Souri's
> initial email, I have:
>
> - Uniformity: For multi-column foreign keys we are already creating
> literal triples, so why not keep it uniform and do it for unary-column
> foreign keys.
The case for Uniformity is stronger than that: All columns, always, are mapped in the same predictable way; with the single exception of unary foreign keys.
> - Performances: introduces need for unnecessary join with the parent
> table to retrieve the value of the foreign key column.
I agree that performance shouldn't be a big deal. It's easy enough to recognize the case where a join is used to retrieve the ID, and optimize the join away.
Other reasons against having the exception:
1. See above -- different things should have different IRIs. A single-column FK is not the same as a column.
2. Some DB schemas don't contain explicit FKs. In this case, one has to do joins using the DM like this:
SELECT ?name ?city WHERE {
?person <PERSON#NAME> ?name .
?person <PERSON#ADDRESS> ?aid .
?address <ADDRESS#CITYNAME> ?city .
?address <ADDRESS#ID> ?aid .
}
And this, while requiring one extra triple pattern, is actually the direct translation of how one does joins in SQL: by requiring that a referenced PK value is the same. So why does the DM stop me from using that approach if an FK happens to be declared?
3. Adding an FK to a DB schema doesn't break SQL queries, so it shouldn't break SPARQL queries either.
4. You decided not to handle many-to-many relationships in the DM. The arguments were that the DM should be kept predictable and super-simple, and there shouldn't be any exceptions in the DM. The counter-argument that this reduces the usability of the DM was rejected as irrelevant – the DM isn't supposed to be usable, because it's not used directly. So why are you now insisting on an exception that makes the DM less predictable, only on a usability argument? And on a trivial usability argument – it just means adding more namespaces if one wants to do everything with namespaces?
Best,
Richard
Received on Thursday, 25 August 2011 12:29:27 UTC