<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://pugs.postgresql.org" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
 <title>PDXPUG</title>
 <link>http://pugs.postgresql.org/taxonomy/term/18</link>
 <description>The taxonomy view with a depth of 0.</description>
 <language>en</language>
<item>
 <title>Call for proposals: PDXPUG PgDay - due by June 20, 2008</title>
 <link>http://pugs.postgresql.org/node/400</link>
 <description>PDXPUG PgDay will be on July 20, 2008.  This is a one-day conference happening the day before OSCON at the Oregon Convention Center. 

We are inviting anyone who has something interesting to share about PostgreSQL to send us a proposal!

We&#039;d like to have at least one 1.5 hour tutorial and up to five 45-minute talks.

We welcome talks in any of the following areas: 

* Case studies involving interesting and innovative uses of PostgreSQL from an application developer, PostgreSQL developer or administrative user perspective
* Converting from other databases to PostgreSQL
* Howtos for database administration tasks (partitioning, backups, replication, writing stored procedures)
* Practical advice on configuration, monitoring and database management

We will notify submitters of their acceptance by June 25, 2008. 

Thank you and we look forward to seeing you at PDXPUG PgDay!

To submit a proposal: 

1. Login to http://pugs.postgresql.org (create an account if you don&#039;t already have one!)
2. Go to: http://pugs.postgresql.org/node/add/pgday-talk-submission
And submit a talk!  Please be sure to include a speaker biography.  Thanks!</description>
 <comments>http://pugs.postgresql.org/node/400#comments</comments>
 <category domain="http://pugs.postgresql.org/taxonomy/term/18">PDXPUG</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/36">announcement</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/95">call for proposals</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/52">oscon</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/53">pgday</category>
 <pubDate>Mon, 02 Jun 2008 03:11:06 +0100</pubDate>
 <dc:creator>selenamarie</dc:creator>
 <guid isPermaLink="false">400 at http://pugs.postgresql.org</guid>
</item>
<item>
 <title>PDXPUG Meeting 6/19/08: The Relational Model</title>
 <link>http://pugs.postgresql.org/node/399</link>
 <description>Topic:   The Relational Model
Who:      Jeff Davis
Date:     6/19/08, 7pm
Where:   FreeGeek, 1731 SE 10th Ave, Portland, OR

Come to our next PostgreSQL Users Group meeting where Jeff Davis will
discuss the finer points of the Relational Model, otherwise known as
the model upon which all major SQL databases systems like Oracle,
MySQL and PostgreSQL are based.

He&#039;s fresh off giving a talk about this at PgCon, where it was very
well received!

Here&#039;s his abstract from that talk:

&quot;This talk focuses on two common data management tasks, and how the
relational model can help. First, how to answer complex questions
about your data, and provide an answer that can be understood by
non-IT people unambiguously. Second, how to effectively extract
meaning from disorganized (or under-documented) data sets for
effective data migration or reporting.

The relational model, on which all SQL DBMSs are based, is founded on
both logic and sets. Relational operators like JOIN and UNION have a
direct logical meaning, and you can use those operators to answer
complex questions from your data unambiguously. Not only can you
provide unambiguous answers, but you can translate SQL queries into
the language of logic, which can be understood by people outside of
IT.

Equally important is the utility of logic working backwards to help
find meaning in disorganized (or perhaps undocumented) data sets.
Nearly every inherited data set is less than perfectly documented, and
often inconsistent. Changes to (or replacement of) the application
require this data to be migrated. By iteratively making assertions and
then testing them using the rules of logic and the convenience of
sets, you can find exceptions and contradictions that help you refine
the meaning of data, and possibly correct inconsistencies.&quot;
</description>
 <comments>http://pugs.postgresql.org/node/399#comments</comments>
 <category domain="http://pugs.postgresql.org/taxonomy/term/18">PDXPUG</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/8">PostgreSQL</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/94">jeff davis</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/39">meeting</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/89">postgres</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/93">relational</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/92">relational model</category>
 <pubDate>Mon, 02 Jun 2008 02:40:30 +0100</pubDate>
 <dc:creator>selenamarie</dc:creator>
 <guid isPermaLink="false">399 at http://pugs.postgresql.org</guid>
</item>
<item>
 <title>PDXPUG: PostgreSQL for Pythoneers!</title>
 <link>http://pugs.postgresql.org/node/393</link>
 <description>Topic:           PostgreSQL for Pythoneers
Speaker:     Jason Kirtland
Date:            Thursday, 5/15/08
Location:     FreeGeek, 1731 SE 10th Ave

Come join us for an evening of Pythoneering with Jason Kirtland, a key
force behind the Portland Python Interest Group -
http://wiki.python.org/moin/PortlandPythonUserGroup.  They are having
Lightning Talks tomorrow night at Cubespace.

Jason hasn&#039;t provided too many details at this point, but I imagine it
will be a tour of a popular Python ORM and a discussion of using it
with PostgreSQL.  

&quot;A tour of SQLAlchemy [1], an open source database toolkit and object relational mapper in Python.  The tour will be SQL heavy and Python-light, and I&#039;m planning on focusing on the object relational mapping part of the tool.

If you have a schema that you&#039;d like to see mapped, send it my way and I&#039;ll do my best to work it in to the presentation.

[1] http://www.sqlalchemy.org/&quot;

Also, Jason has offered to map RT - a continuation of our &lt;a href=&quot;http://pugs.postgresql.org/node/161&quot;&gt;refactored schema meeting&lt;/a&gt; for RT.

Refreshments afterward at the Lucky Lab!</description>
 <comments>http://pugs.postgresql.org/node/393#comments</comments>
 <category domain="http://pugs.postgresql.org/taxonomy/term/18">PDXPUG</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/8">PostgreSQL</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/36">announcement</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/39">meeting</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/89">postgres</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/88">python</category>
 <pubDate>Mon, 12 May 2008 17:32:50 +0100</pubDate>
 <dc:creator>selenamarie</dc:creator>
 <guid isPermaLink="false">393 at http://pugs.postgresql.org</guid>
</item>
<item>
 <title>Road Trip!</title>
 <link>http://pugs.postgresql.org/node/389</link>
 <description>This past weekend, Selena, Mark &amp; I loaded up Mark&#039;s car with flyers, mugs &amp; t-shirts &amp; headed up to Bellingham, WA for Linuxfest NW (website:  http://linuxfestnorthwest.org/).

Several LUGs in the area host this annual conference.  This was my first Linuxfest &amp; I was really impressed - it was very well-organized, well-attended and FUN.

Mark gave his talk about ptop/pgtop first thing Saturday morning.  We managed to see some other talks too - Selena checked out some Drupal talks &amp; I went to Eric Hopper&#039;s IPv6 discussion on Sunday.

We all had a great time running the booth, despite the lack of JD&#039;s entertaining presence.  He was replaced by surprise guest boothster, Chris Travers!  Chris showed up to give a LedgerSMB talk and we conned him into boothbeasting with us.  Thanks, Chris!  Even though it was &lt;A HREF=&quot;http://flickr.com/photos/bitpusher/2445382570/&quot;&gt;crowded&lt;/A&gt; behind our table, I think four staffers was the &lt;a href=&quot;http://www.flickr.com/photos/88362365@N00/2448879468/&quot;&gt;right&lt;/A&gt; (minimum!) &lt;a href=&quot;http://www.flickr.com/photos/88362365@N00/2448055993/&quot;&gt;number&lt;/A&gt; to have for handling questions &amp; greeting people.

The conference was really packed.  I think I talked at length to somewhere around 12-15 people.  We had a HUGE range of questions, all the way from people wondering about replication strategies to &quot;What&#039;s a database, anyway?&quot;  We also ran through the inevitable &quot;how do you pronounce it?&quot;  Selena gave a long demo of pgadmin to someone who is currently using SQL Server.  A lot of people are very interested in a MySQL -&gt; PostgreSQL migration tool.

We ran out of almost all printed materials we&#039;d brought on the first day, necessitating phone calls to Josh B to acquire more flyers and a local copy shop to print them.  Selena had the brilliant idea to get some elephant logo stickers printed as well; they were very popular.

Saturday night, Silicon Mechanics hosted the afterparty at the American Museum of Radio &amp; Electricity, a truly excellent site for a geek party!  We got to dink around with static electricity machines &amp; toys from past centuries.  Selena stepped up to the theramin while Mark &amp; I checked out the old music boxes.  The best part of the evening for me was when the docents set up a small tesla coil.  &gt;:)  We had a great little &lt;A HREF=&quot;http://flickr.com/photos/88362365@N00/2448056801/&quot;&gt;indoor lightning show&lt;/A&gt; &amp; Selena became part of a multi-person chain that lit up a fluorescent tube.

Back home now, attempting to recover from Conference Brain.</description>
 <comments>http://pugs.postgresql.org/node/389#comments</comments>
 <category domain="http://pugs.postgresql.org/taxonomy/term/18">PDXPUG</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/73">linuxfest</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/59">recap</category>
 <pubDate>Tue, 29 Apr 2008 01:42:06 +0100</pubDate>
 <dc:creator>gabrielle</dc:creator>
 <guid isPermaLink="false">389 at http://pugs.postgresql.org</guid>
</item>
<item>
 <title>PDXPUG - Rails on PostgreSQL meeting wrap up!</title>
 <link>http://pugs.postgresql.org/node/387</link>
 <description>Thanks everyone who came out for the meeting!  Next meeting on our schedule will be about Python and PostgreSQL, courtesy of Jason Kirtland. 

We had a terrific turnout, and four new people.  One of the FreeGeek folks came and talked with me after the meeting about how he had changed the database that FreeGeek uses from MySQL to PostgreSQL a while back. 

We had two people from InnoTech attend that had also seen my 5-minute schpeale.  One had already planned on coming (Hi Mike!), but I take credit for getting Craig interested!  The other new person, Ed, works with Mike on Rails application development.  

ANNOUNCEMENTS:

PDXPUG PgDay before OSCON is happening July 20, 2008!  We have some volunteers to help organize it, I&#039;m setting up a mailing list.  Those who volunteered, expect some email this weekend about kicking things off.

PostgreSQL Conference East was a total success!  ~100 people 
Check out details at http://www.postgresqlconference.org/

MEETING DETAILS:

David&#039;s presentation was both an introduction to Rails development, and a tutorial on getting Rails to work with PostgreSQL. Some of his examples came directly from his work on I Want Sandy (www.iwantsandy.com), a web-based product that uses PostgreSQL.

There was intense discussion of drivers with thank-yous to Jeff Davis for adopting the Ruby PostgreSQL driver. There were useful, detailed examples of how to create data migrations and develop queries for Rails. There was a lot of monkey patching.

I enjoyed this talk so much.  You can find audio of David&#039;s presentation of this talk at PostgreSQL Conference West here: http://www.postgresqlconference.org/fall2007_audio/RoR_Essentials.mp3

David is going to pass the updated slides on to me, and I&#039;ll post them on http://pugs.postgresq.org/pdx

Mark also brought the T2000 that was donated to the new Performance Lab that Mark is setting up. He&#039;s working with Joshua Drake on getting the machine racked and set up to run tests!  Gabrielle used her serial-fu to help him get the machine booted and running. 

Many of us retired to the Lucky Lab for refreshments. 
</description>
 <comments>http://pugs.postgresql.org/node/387#comments</comments>
 <category domain="http://pugs.postgresql.org/taxonomy/term/18">PDXPUG</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/71">meeting minutes</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/59">recap</category>
 <enclosure url="http://pugs.postgresql.org/files/running_rails_on_postgresql.pdf" length="10722821" type="application/pdf" />
 <pubDate>Fri, 18 Apr 2008 17:44:09 +0100</pubDate>
 <dc:creator>selenamarie</dc:creator>
 <guid isPermaLink="false">387 at http://pugs.postgresql.org</guid>
</item>
<item>
 <title>April Meeting - Ruby on Rails Essentials for PostgreSQL Enthusiasts - David Wheeler</title>
 <link>http://pugs.postgresql.org/node/384</link>
 <description>Meeting in one week!

Date:  Thursday, April 17, 2008
Time:  7:00pm (that&#039;s 1900 hours.)
Place:  &lt;A HREF=&quot;http://freegeek.org/&quot;&gt;FreeGeek&lt;/A&gt;

Our own David Wheeler will give a repeat performance of his talk from PostgreSQL Conference West 2007:

Ruby on Rails Essentials for PostgreSQL Enthusiasts

Has all the hype got you jazzed to develop Ruby on Rails applications on PostgreSQL? Is virtually everything you find about Rails MySQL- specific? Come to this talk to learn all you need to know to make Rails and PostgreSQL work together harmoniously. Topics will likely include:

    * The ins and outs of Rails migrations
    * How to add support for foreign key constraints
    * Managing partial indexes and other PostgreSQL-specific objects
    * Working with views
    * Monkey patching for fun and profit
    * Supporting multi-column primary keys
    * The joys and pains of Rails collections
    * Working with time zones
    * The antiquity of the Ruby PostgreSQL driver (NOT)
    * Enforcing constraints in Rails *and* in the database
    * Getting Rails to execute *your* queries instead of its own
    * Saved queries for &quot;fat models&quot;

---
See you there!</description>
 <comments>http://pugs.postgresql.org/node/384#comments</comments>
 <category domain="http://pugs.postgresql.org/taxonomy/term/18">PDXPUG</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/36">announcement</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/39">meeting</category>
 <pubDate>Thu, 10 Apr 2008 15:00:05 +0100</pubDate>
 <dc:creator>gabrielle</dc:creator>
 <guid isPermaLink="false">384 at http://pugs.postgresql.org</guid>
</item>
<item>
 <title>March 20th meeting Recap and slides from intro</title>
 <link>http://pugs.postgresql.org/node/377</link>
 <description>Just quickly uploading some slides from the meeting.  Covered all the crazy conferences coming up soon, and included a plug for Summer of Code and PostgreSQL -- if you&#039;re a student, its $4500 for the summer and great experience!  &lt;a href=&quot;http://www.postgresql.org/developer/summerofcode&quot;&gt;Check it out&lt;/a&gt;!!

Also, a few slides about &lt;a href=&quot;http://www.postgresql.us/&quot;&gt;USPA&lt;/a&gt; and what we&#039;re up to!

Check out Joshua&#039;s &lt;a href=&quot;http://www.commandprompt.com/blogs/joshua_drake/2008/03/read_only_templates_pdxpug_march_20th_2008/&quot;&gt;recap of our ice-breaker&lt;/a&gt; over on his blog. 

Ed Sawicki gave an overview of spam supression techniques he&#039;s using and gave us a few tips on tools that were useful to him. We recommended he have a look at some CIDR address types available on pgfoundry.org to help with some performance issues he found. </description>
 <comments>http://pugs.postgresql.org/node/377#comments</comments>
 <category domain="http://pugs.postgresql.org/taxonomy/term/18">PDXPUG</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/39">meeting</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/59">recap</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/60">slides</category>
 <enclosure url="http://pugs.postgresql.org/files/March2008pdxpug.pdf" length="31248" type="application/pdf" />
 <pubDate>Thu, 27 Mar 2008 01:29:01 +0000</pubDate>
 <dc:creator>selenamarie</dc:creator>
 <guid isPermaLink="false">377 at http://pugs.postgresql.org</guid>
</item>
<item>
 <title>OSCON PostgreSQL Day July 20th - Save the date!</title>
 <link>http://pugs.postgresql.org/node/374</link>
 <description>Save The Date: OSCON PostgreSQL Day

&lt;a href=&quot;http://pugs.postgresql.org/node/400&quot;&gt;Call for papers&lt;/a&gt;

PostgreSQL community,

The O&#039;Reilly Open Source Conference 2008 schedule will soon be revealed, and
some of you -- especially those speaking -- will be making your travel
arrangements to visit Portland.  But, wait!  Before you buy your plane
tickets, you&#039;d better know about the PostgreSQL Day hosted by PDXPUG!

What: All-day PostgreSQL one-track mini-conference
When: Sunday, July 20th, 9am to 5pm, possible party afterwards
Who: PDXPUG will select speakers
Where: Portland Convention Center, Portland, Oregon

Of course, we are also looking for speakers for the PostgreSQL Day.  PDXPUG
wants four hour-long sessions and one 2.5-hour workshop.  Please
e-mail selena -at- postgresql.org with your offer to speak and speakers will be selected in mid-April.

Thanks to Josh Berkus, Joshua Drake, the OSCON conference and PDXPUG
for helping make this happen!</description>
 <comments>http://pugs.postgresql.org/node/374#comments</comments>
 <category domain="http://pugs.postgresql.org/taxonomy/term/18">PDXPUG</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/8">PostgreSQL</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/52">oscon</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/53">pgday</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/54">user groups</category>
 <pubDate>Thu, 20 Mar 2008 14:00:51 +0000</pubDate>
 <dc:creator>selenamarie</dc:creator>
 <guid isPermaLink="false">374 at http://pugs.postgresql.org</guid>
</item>
<item>
 <title>Next Meeting: March 20, 2008 - Managing internet services: using the right tool for the job </title>
 <link>http://pugs.postgresql.org/node/365</link>
 <description>TOPIC: Managing internet services: using the right tool for the job 
SPEAKER: Ed Sawicki
WHEN: March 20, 2008, 7pm
WHERE: FreeGeek, &lt;a href=&quot;http://maps.google.com/maps?hl=en&amp;client=firefox-a&amp;rls=org.mozilla:en-US:official&amp;hs=eju&amp;um=1&amp;ie=UTF-8&amp;cid=0,0,13350744062808359618&amp;fb=1&amp;dq=freegeek+loc:+Portland,+OR&amp;daddr=1731+SE+10th+Ave,+Portland,+OR+97214&amp;geocode=1851651512384646389,45.510553,-122.655733&amp;ll=45.510553,-122.655733&amp;iwstate1=dir:to&amp;iwloc=A&amp;f=d&amp;sa=X&amp;oi=local_result&amp;resnum=1&amp;ct=directions-to&quot;&gt;1731 SE 10th Ave, Portland, OR 97214&lt;/a&gt;

Also: What the heck is the United States PostgreSQL Association?, Selena Deckelmann

AND: ELEPHANT BUTTONS!  courtesy of David Fetter. 

Here&#039;s what Ed had to say about his presentation: 

&quot;I&#039;ll probably end up doing live benchmarks, showing code
snippets, and explaining my rationale for why I chose
to do things the way I do.&quot;

&quot;My current projects involve managing a variety
of Internet services, such as spam suppression and the
associated per-user black/white list management, DNS record
management, PKI key management, and a variety of others. Some
of these services require that I deal with the storage and
retrieval of both discrete IP addresses and CIDR blocks in
real time.

I&#039;ve had to decide on data stores that include plain text
files, SQL using SQLite and Postgres, and constant databases
using tinycdb. At every stage of development I&#039;ve had to
decide which of these was best based on tools available and
performance testing. For example, Postgres has IP and CIDR
data types and adequate facilities to search for IP addresses
within a CIDR block but performance pales in comparison to
simpler tools that use plain text files. As a result, my
applications use various data stores instead of just one.&quot;

Refreshment afterward at the Lucky Lab!</description>
 <comments>http://pugs.postgresql.org/node/365#comments</comments>
 <category domain="http://pugs.postgresql.org/taxonomy/term/18">PDXPUG</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/8">PostgreSQL</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/36">announcement</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/39">meeting</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/37">oregon</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/19">portland</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/38">user group</category>
 <pubDate>Wed, 19 Mar 2008 18:06:21 +0000</pubDate>
 <dc:creator>selenamarie</dc:creator>
 <guid isPermaLink="false">365 at http://pugs.postgresql.org</guid>
</item>
<item>
 <title>Extreme Database makeover: RT meeting recap</title>
 <link>http://pugs.postgresql.org/node/161</link>
 <description>[cross posted w/ photos at &lt;a href=&quot;http://www.chesnok.com/daily/2008/02/27/extreme-database-makeover-rt-meeting-recap/&quot;&gt;selena&#039;s blog&lt;/a&gt;]
[&lt;strong&gt;Update:&lt;/strong&gt; SQL for database schema courtesy of David Wheeler now included at the bottom of the page.]

&lt;center&gt;&lt;a href=&quot;http://www.flickr.com/photos/selenamarie/2296351214/&quot; title=&quot;Extreme Database Makeover: The crowd by selena marie, on Flickr&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3008/2296351214_0fc0723814_m.jpg&quot; width=&quot;240&quot; height=&quot;160&quot; alt=&quot;Extreme Database Makeover: The crowd&quot; /&gt;&lt;/a&gt;&lt;/center&gt;

Last night, PDXPUG and Code-n-Splode got together to refactor the database for RT. &lt;a href=&quot;http://www.justatheory.com/&quot;&gt;David Wheeler&lt;/a&gt;, &lt;a href=&quot;http://people.planetpostgresql.org/jdavis/&quot;&gt;Jeff Davis&lt;/a&gt; and Mark Wong led the discussion. 

Through the course of the meeting, the group chose to pick out a few key features that would be better served if the database schema was more normalized, and offered a few new constraints we thought would help manage the data. Toward the end of the meeting, Igal suggested having a Perl workshop to refactor the code related to one or more of the database changes. The idea here was to be helpful, rather than just poking holes in the schema.

David started the discussion off with an introduction to RT.  RT was created about 10 years ago by Jesse Vincent of &lt;a href=&quot;http://bestpractical.com&quot;&gt;Best Practical&lt;/a&gt;, and the database schema has been augmented over the years to accommodate new functionality.  They support both MySQL and PostgreSQL as backends, and tend to dislike using database-specific technology. 

&lt;!--more--&gt;

The killer feature in RT is its email-to-ticket functionality. Managing tickets directly from email is convenient and reduces the maintenance overhead for users and developers. RT has some great workflow controls -  allowing specific actions to be taken when certain types of changes occur in a ticket. 

&lt;center&gt;&lt;a href=&quot;http://www.flickr.com/photos/selenamarie/2296677046/&quot; title=&quot;3.4-schema.png by selena marie, on Flickr&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3284/2296677046_1891940233_m.jpg&quot; width=&quot;240&quot; height=&quot;211&quot; alt=&quot;3.4-schema.png&quot; /&gt;&lt;/a&gt;&lt;/center&gt;

David reviewed a few key tables, and focused in on &lt;code&gt;tickets&lt;/code&gt;, &lt;code&gt;transactions&lt;/code&gt; and &lt;code&gt;attachments&lt;/code&gt;.  These tables are ones he was most familiar with from integrating RT in with &lt;a href=&quot;http://iwantsandy.com&quot;&gt;I Want Sandy&lt;/a&gt;.  A few key observations were: 

&lt;ul&gt;
	&lt;li&gt;No foreign key constraints&lt;/li&gt;
	&lt;li&gt;&quot;Polymorphic relations&quot; (tables storing multiple types of information)&lt;/li&gt;
	&lt;li&gt;Default values in columns could be nicer&lt;/li&gt;
&lt;/ul&gt;

Addressing these three issues could fix potential data integrity problems, improve searchability and the make   SQL queries of the data simpler and easier to maintain. We were also interested in improving the quality of the data stored in each row through constraints. 

After this overview, we dove into a couple problems.

First, we weren&#039;t sure in the database how to group workflow actions together.  Based on the database, each transaction is independent, and &quot;scrip&quot; actions appear to be based on a row insert.  The symptom of this is that if you create a workflow control, you can&#039;t group together two &quot;transactions&quot; and yield a single email response.  You&#039;ll get an email for each transaction recorded in the database. 

We didn&#039;t dig into the associated Perl modules, but from a database perspective, a straight-forward normalization exercise solves the problem. We renamed &lt;code&gt;transactions&lt;/code&gt; to &lt;code&gt;ticket_events&lt;/code&gt;, and added a secondary table containing &lt;code&gt;ticket_data&lt;/code&gt;. This new structure allows for multiple &lt;code&gt;ticket_data&lt;/code&gt; rows to be linked to a single &lt;code&gt;ticket_event&lt;/code&gt;. A simple view on these two tables could present nearly the same information as is available in &lt;code&gt;transactions&lt;/code&gt; today, but now the system could group multiple &lt;code&gt;ticket_data&lt;/code&gt; together. 

We also tackled the schema representing email messages and their relationship with tickets. The existing database requires a JOIN between &lt;code&gt;transactions&lt;/code&gt; and &lt;code&gt;tickets&lt;/code&gt; to find.  David and Jeff laid out a message table, split out interesting fields in email to make search and comparison easier.  They also a foreign key to link email directly to both &lt;code&gt;tickets&lt;/code&gt; and &lt;code&gt;ticket_events&lt;/code&gt;.

&lt;center&gt;&lt;a href=&quot;http://www.flickr.com/photos/selenamarie/2295557989/&quot; title=&quot;Extreme Database Makeover: the relational schema by selena marie, on Flickr&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3167/2295557989_2c5c607cdd_m.jpg&quot; width=&quot;160&quot; height=&quot;240&quot; alt=&quot;Extreme Database Makeover: the relational schema&quot; /&gt;&lt;/a&gt;&lt;/center&gt;

Toward the end of the meeting, Mark wrote out the foreign key relationships for the new relational schema.  We really needed a schema-&gt;diagram system so that we could view the schema in real-time. Some suggestions were made to use Autodoc with GraphViz to get real-time visualization of the entire schema. Next time!

The discussion also ranged into synthetic vs. natural keys, appropriate use and definition of NULLs, the difference between Entity relationship diagrams and relational schema diagrams, and the utility of workshops like this one to see how other people think about schema refactoring. 

Before the meeting, David spent about an hour digging into the schema and talking with RT developers to get a feel for what types of changes they&#039;d be open to.   We&#039;re not sure that the suggestions from our little workshop will be incorporated, mostly because the codebase for RT is large and complex. David&#039;s plan was to send the suggestions on to Best Practical. </description>
 <comments>http://pugs.postgresql.org/node/161#comments</comments>
 <category domain="http://pugs.postgresql.org/taxonomy/term/35">Extreme Database Makeover</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/18">PDXPUG</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/34">meetingnotes</category>
 <category domain="http://pugs.postgresql.org/taxonomy/term/33">summary</category>
 <enclosure url="http://pugs.postgresql.org/files/rt.txt" length="12508" type="text/plain" />
 <pubDate>Wed, 27 Feb 2008 18:39:26 +0000</pubDate>
 <dc:creator>selenamarie</dc:creator>
 <guid isPermaLink="false">161 at http://pugs.postgresql.org</guid>
</item>
</channel>
</rss>
