Thread: INT OR VARCHAR

INT OR VARCHAR

From
Martín Marqués
Date:
I have a table that will be populated with machines of a net we have. And we 
have more then 1 domain, so we thought about putting a seperate table with 
the domains, and a reference in the nodes table to the apropiate domain.

The question is, should I put an SERIAL field in the domain table and use 
that as the PK, and use an INT reference in the nodes table?
Or is it a good idea to just leave the domain name (a CHAR(30) field) in the 
domain table and make the node.domain a CHAR(30) that references to 
domain.name?
What would be the best approche?

Saludos... :-)

-- 
Porqué usar una base de datos relacional cualquiera,
si podés usar PostgreSQL?
-----------------------------------------------------------------
Martín Marqués                  |        mmarques@unl.edu.ar
Programador, Administrador, DBA |       Centro de Telematica                      Universidad Nacional
        del Litoral
 
-----------------------------------------------------------------


Re: INT OR VARCHAR

From
"Aasmund Midttun Godal"
Date:
I am not sure what you are trying to do, but if you have a tree structure you will have to use an id column e.g.:

CREATE TABLE domain (id SERIAL PRIMARY KEY,name TEXT CHECK (lower(name) ~ '[a-z0-9]([a-z0-9-]*[a-z0-9])?',parent
INTEGERREFERENCES domain,UNIQUE (parent, name)
 
);

If you do not have a tree structure, I would recommend using a natural primary key in stead of serializing it. Bear in
mindthough - you should always have a primary key. I would also recommend creating a couple of functions to build a
fullyqualified domain name from the id.
 

Regards,

Aasmund.
On Wed, 5 Dec 2001 17:41:40 -0300, Martín Marqués <martin@bugs.unl.edu.ar> wrote:
> I have a table that will be populated with machines of a net we have. And we 
> have more then 1 domain, so we thought about putting a seperate table with 
> the domains, and a reference in the nodes table to the apropiate domain.
> 
> The question is, should I put an SERIAL field in the domain table and use 
> that as the PK, and use an INT reference in the nodes table?
> Or is it a good idea to just leave the domain name (a CHAR(30) field) in the 
> domain table and make the node.domain a CHAR(30) that references to 
> domain.name?
> What would be the best approche?
> 
> Saludos... :-)
> 
> -- 
> Porqué usar una base de datos relacional cualquiera,
> si podés usar PostgreSQL?
> -----------------------------------------------------------------
> Martín Marqués                  |        mmarques@unl.edu.ar
> Programador, Administrador, DBA |       Centro de Telematica
>                        Universidad Nacional
>                             del Litoral
> -----------------------------------------------------------------
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster

Aasmund Midttun Godal

aasmund@godal.com - http://www.godal.com/
+47 40 45 20 46


Re: INT OR VARCHAR

From
Martín Marqués
Date:
On Mié 05 Dic 2001 18:03, Aasmund Midttun Godal wrote:
> I am not sure what you are trying to do, but if you have a tree structure
> you will have to use an id column e.g.:
>
> CREATE TABLE domain (
>     id SERIAL PRIMARY KEY,
>     name TEXT CHECK (lower(name) ~ '[a-z0-9]([a-z0-9-]*[a-z0-9])?',
>     parent INTEGER REFERENCES domain,
>     UNIQUE (parent, name)
> );
>
>
> If you do not have a tree structure, I would recommend using a natural
> primary key in stead of serializing it. Bear in mind though - you should
> always have a primary key. I would also recommend creating a couple of
> functions to build a fully qualified domain name from the id.

No, it's not a tree structure.
The question is why not serialize it?
I vote for not serializing it because when I get the data from the database, 
I don't have to join the 2 tables (the domain name is on both tables).

CREATE TABLE domain (name    CHAR(30) PRIMARY KEY
);

CREATE TABLE nodes (id    SERIAL,name    CHAR(30),domain    CHAR(30) REFERENCES domain ("name")
);

This is a better approach then putting a SERIAL value to the domain table and 
making nodes.domain reference to that SERIAL? Why?

Saludos... :-)

-- 
Porqué usar una base de datos relacional cualquiera,
si podés usar PostgreSQL?
-----------------------------------------------------------------
Martín Marqués                  |        mmarques@unl.edu.ar
Programador, Administrador, DBA |       Centro de Telematica                      Universidad Nacional
        del Litoral
 
-----------------------------------------------------------------