http://www.perlmonks.org?node_id=1085187


in reply to Re^3: In base 1, the number after 0 is:
in thread In base 1, the number after 0 is:

If you want to search for entities which contain a "Foo" part then you need to do:

SELECT entity_id FROM entities WHERE part1='Foo' OR part2='Foo' OR part3='Foo' ... OR part12='Foo';

Or perhaps slightly more concise:

SELECT entity_id FROM entities WHERE 'Foo' IN (part1, part2, part3, ..., part12);

I'd much prefer something like:

SELECT e.entity_id FROM entities e INNER JOIN entity_parts ep ON e.entity_id=ep.entity_id WHERE ep.part='Foo'

When you get to searching for different combinations of parts, the advantages of joining become even more apparent:

SELECT e.entity_id FROM entities e INNER JOIN entity_parts ep1 ON e.entity_id=ep1.entity_id INNER JOIN entity_parts ep2 ON e.entity_id=ep2.entity_id WHERE ep1.part='Foo' AND ep2.part IN ('Bar', 'Baz')

And in terms of the e-mail example, it's much easier to, say, enforce a UNIQUE constraint over a single column.

use Moops; class Cow :rw { has name => (default => 'Ermintrude') }; say Cow->new->name