Thread: Simple PHP/pgsql optimization question...

Simple PHP/pgsql optimization question...

From
Gaëtan de Menten
Date:
Hi there all,

First, I'm far from being a professional programmer in pgsql and PHP and I'm
new to this list, so please pardon if this question seems stupid to you.

In my 'projects' tables, among many other fields, I need a 'license' field.
I need to optimize the display of the list of all projects (+-200 projects
to display).
Which solution do you think would be the fastest, and how much faster?

1) Have a 'license' table (with and id and a name field) listing all the
possible licenses and have a foreign key in my 'projects' table pointing to
that 'license' table.
the query would look like this:
select ..., license.name as license from projects, licenses where
projects.license=license.id and ...

2) Have the license field in the 'projects' table be a varchar field and
store the name of the license directly.

3) Have the license field be an int and have an array in PHP listing all the
licenses.

4) another solution?

I personnaly prefer the first solution since it's the cleanest to my eyes
but I'm ready to trade that for speed, if another solution is much faster.

Thanks a lot,
Gaëtan.


Re: Simple PHP/pgsql optimization question...

From
Chadwick Rolfs
Date:
On Sat, 18 May 2002, [iso-8859-1] Ga�tan de Menten wrote:

> Hi there all,
>
> First, I'm far from being a professional programmer in pgsql and PHP and I'm
> new to this list, so please pardon if this question seems stupid to you.
>
> In my 'projects' tables, among many other fields, I need a 'license' field.
> I need to optimize the display of the list of all projects (+-200 projects
> to display).
> Which solution do you think would be the fastest, and how much faster?
>
> 1) Have a 'license' table (with and id and a name field) listing all the
> possible licenses and have a foreign key in my 'projects' table pointing to
> that 'license' table.
> the query would look like this:
> select ..., license.name as license from projects, licenses where
> projects.license=license.id and ...
>
> 2) Have the license field in the 'projects' table be a varchar field and
> store the name of the license directly.
>
> 3) Have the license field be an int and have an array in PHP listing all the
> licenses.
>
> 4) another solution?
>
> I personnaly prefer the first solution since it's the cleanest to my eyes
> but I'm ready to trade that for speed, if another solution is much faster.
>
> Thanks a lot,
> Ga�tan.

I prefer the first solution also.  You can add or take away liscenses
without having to edit a huge amount of data.  Be sure you do the right
thing with the foreign key.  I would leave most of the data handling to
postgresql and use php to make it accessable(sp?) in a
pretty way....

-Chadwick


Re: Simple PHP/pgsql optimization question...

From
Keary Suska
Date:
on 5/18/02 9:14 AM, ged@bugfactory.org purportedly said:

> In my 'projects' tables, among many other fields, I need a 'license' field.
> I need to optimize the display of the list of all projects (+-200 projects
> to display).
> Which solution do you think would be the fastest, and how much faster?
>
> 1) Have a 'license' table (with and id and a name field) listing all the
> possible licenses and have a foreign key in my 'projects' table pointing to
> that 'license' table.
> the query would look like this:
> select ..., license.name as license from projects, licenses where
> projects.license=license.id and ...
>
> 2) Have the license field in the 'projects' table be a varchar field and
> store the name of the license directly.
>
> 3) Have the license field be an int and have an array in PHP listing all the
> licenses.
>
> 4) another solution?

The main issue is the relationship between licenses and projects. Can there
be more than one license per project, or multiple projects per license, or
both? Or is there only one license per project? Only in this last case is it
advisable to have the license field in the project table. Data integrity
should never be sacrificed for any reason, even speed. But if you are
talking about hundreds of records, you should not notice any speed
difference regardless of how you implement it, at least as far as Postgres
is concerned.

Your solution #1 works properly only if there are multiple projects per
license, and is the best solution in that case.

Keary Suska
Esoteritech, Inc.
"Leveraging Open Source for a better Internet"