Package DB Schema v3

Karel Zak kzak at redhat.com
Tue Dec 5 22:10:14 UTC 2006


On Tue, Dec 05, 2006 at 11:32:29AM -0800, Toshio Kuratomi wrote:
> >  status     text not null default 'D'
> >             check ( status IN ('D','A','M','E','R') )
> > 
> What's the justification?  Here's my reasoning:
> [Single letter code]
> + Harder to misspell
> + Takes less storage space

  + Takes less space for data transfer between client and DB engine
 
> [Full words]
> + Less cryptic

 cryptic? Who will be typical client for your DB?  Human or script? ;-)

> We could solve both concerns by having a foreign key constraint into a
> table with the valid status phrases for each table that needs statuses

 Yes. It's a good way *in case* you need modify/add status types,
 otherwise it's over engineering. (FK is nothing cheap for DB engine.)

> but that makes things more complex.  This would allow us to select the
> list of valid statuses from a database table which is a plus.  But it
> would also require a join for the common case of giving a human readable
> name for the status.  So I'd like to hear your justification.
> 
> > > 
> > > create table Branch (
> > >   collectionId integer not null primary key,
> > >   branchName varchar(32) not null,
> >     ^^^^^^^^^
> > >   distTag varchar(32) not null,
> >     ^^^^^^
> >   is it right define duplicate tags and branch names?
> > 
> distTag and branchName are different pieces of data.
> From the comments:
> -- :branchName: Name of the branch in the VCS ("FC-3", "devel")
> -- :distTag: DistTag used in the buildsystem (".fc3", ".fc6")
> 
> It may be unfortunate that we don't use the same names for both, but
> it's the way things are.

 Well, the question is: is it expected that there will be same DistTag
 for different branches? If not.. define distTag as UNIQUE.

> > >   parentId integer null,
> > >   foreign key (parentId) references Collection(id),
> > >   foreign key (collectionId) references Collection(id)
> > > );
> > 
> >  Hmm.. here I see 1:1 model (PK=FK). Strange. (It usually means that
> >  you should merge the tables to one table only.) Maybe:
> > 
> >  create table Branch (
> >     id serial primary key,
> >     branchName varchar(32) not null unique,
> >     distTag varchar(32) not null unique,
> >     parentId integer references Collection(id),
> >     collectionId integer not null references Collection(id)
> >  );
> > 
> We're actually modeling a 1:[0 1] relationship.  For programmers, this
> would be inheritance.

 Hint: never think about programmers and DB usage when you work on DB
 design. Think about data and relatioships between data only :-)

 I don't have time to study data and real relatioships for this DB, but
 1:1 is usually very strange. (and 1:0 = PK:NULL in normal table).

    Karel

-- 
 Karel Zak  <kzak at redhat.com>




More information about the Fedora-infrastructure-list mailing list