<?xml version="1.0" encoding="utf-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: A Classic Web 2.0 Architecture Puzzle</title>
	<atom:link href="http://wildfalcon.com/archives/2008/08/29/a-classic-web-20-architecture-puzzle/feed/" rel="self" type="application/rss+xml" />
	<link>http://wildfalcon.com/archives/2008/08/29/a-classic-web-20-architecture-puzzle/</link>
	<description>Laurie Young: Scrum Master, Dancer, Photographer and Entrepreneur</description>
	<lastBuildDate>Wed, 11 Jan 2012 12:24:00 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>By: Richard</title>
		<link>http://wildfalcon.com/archives/2008/08/29/a-classic-web-20-architecture-puzzle/comment-page-1/#comment-16558</link>
		<dc:creator>Richard</dc:creator>
		<pubDate>Mon, 01 Sep 2008 12:25:56 +0000</pubDate>
		<guid isPermaLink="false">http://wildfalcon.com/archives/2008/08/29/a-classic-web-20-architecture-puzzle/#comment-16558</guid>
		<description>This is possible in relational terms - but its not clean, and it relies on a schema change whenever you add features.

Create an umbrella concept - say taggables. Both maps and video clips are taggables. In OO terms they&#039;d implement the taggable interface or be subclasses of the taggable class. Here comes the messy part:

Create a table called taggables which only contains one column - it is the primary key (obviously) and contains a list of taggable uids. You then need a mapping table from each kind of taggable object to your taggables table (this is analogous to the code you&#039;d have to write for each implementation of the taggable interface). For example a table called taggable_maps which has two columns - both foreign keys - one from maps and one from taggables. The same thing would exist for videos. You can then create your tag tables against that UID in the taggables database. 

Possibly you could do this with a column in the videos table and in the maps table storing the tagableness ID - but I&#039;ve not got time to do the necessary thinking to ensure that works in all cases. The advantage of seperate tables is that you can add taggableness without altering tables.

The only thing your database wouldn&#039;t do for you is prevent a map and a video being linked to the same taggable ID.</description>
		<content:encoded><![CDATA[<p>This is possible in relational terms &#8211; but its not clean, and it relies on a schema change whenever you add features.</p>
<p>Create an umbrella concept &#8211; say taggables. Both maps and video clips are taggables. In OO terms they&#8217;d implement the taggable interface or be subclasses of the taggable class. Here comes the messy part:</p>
<p>Create a table called taggables which only contains one column &#8211; it is the primary key (obviously) and contains a list of taggable uids. You then need a mapping table from each kind of taggable object to your taggables table (this is analogous to the code you&#8217;d have to write for each implementation of the taggable interface). For example a table called taggable_maps which has two columns &#8211; both foreign keys &#8211; one from maps and one from taggables. The same thing would exist for videos. You can then create your tag tables against that UID in the taggables database. </p>
<p>Possibly you could do this with a column in the videos table and in the maps table storing the tagableness ID &#8211; but I&#8217;ve not got time to do the necessary thinking to ensure that works in all cases. The advantage of seperate tables is that you can add taggableness without altering tables.</p>
<p>The only thing your database wouldn&#8217;t do for you is prevent a map and a video being linked to the same taggable ID.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Laurie</title>
		<link>http://wildfalcon.com/archives/2008/08/29/a-classic-web-20-architecture-puzzle/comment-page-1/#comment-16510</link>
		<dc:creator>Laurie</dc:creator>
		<pubDate>Fri, 29 Aug 2008 23:29:59 +0000</pubDate>
		<guid isPermaLink="false">http://wildfalcon.com/archives/2008/08/29/a-classic-web-20-architecture-puzzle/#comment-16510</guid>
		<description>Surely thats not what you would tell the client? :p You would have to come up with some way to do it ...</description>
		<content:encoded><![CDATA[<p>Surely thats not what you would tell the client? :p You would have to come up with some way to do it &#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Fabre Lambeau</title>
		<link>http://wildfalcon.com/archives/2008/08/29/a-classic-web-20-architecture-puzzle/comment-page-1/#comment-16505</link>
		<dc:creator>Fabre Lambeau</dc:creator>
		<pubDate>Fri, 29 Aug 2008 16:23:43 +0000</pubDate>
		<guid isPermaLink="false">http://wildfalcon.com/archives/2008/08/29/a-classic-web-20-architecture-puzzle/#comment-16505</guid>
		<description>Not solvable with a pure compliant relational database schema
You will need to become non-BCNF!</description>
		<content:encoded><![CDATA[<p>Not solvable with a pure compliant relational database schema<br />
You will need to become non-BCNF!</p>
]]></content:encoded>
	</item>
</channel>
</rss>

