Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.server -> Re: DB Design question: Do you create a separate PK in the join table?

Re: DB Design question: Do you create a separate PK in the join table?

From: Pete Sharman <psharman_at_us.oracle.com>
Date: Thu, 13 Jan 2000 05:43:56 -0800
Message-ID: <387DD69C.942F238E@us.oracle.com>


This is in fact incorrect. Replication DOES work on tables without primary keys, you just need to tell Oracle what would be the columns to treat as though they were primary keys. From the 8i replication API manual:

SET_COLUMNS procedure

To use an alternate column or group of columns, instead of the primary key, to determine which columns of a table to compare when using row-level replication. You must call this procedure from the master definition site.

See "Using Multimaster Replication" in the Oracle8i Replication manual

Syntax

DBMS_REPCAT.SET_COLUMNS (

   sname           IN    VARCHAR2,
   oname           IN    VARCHAR2,

   { column_list IN VARCHAR2
   | column_table IN DBMS_UTILITY.NAME_ARRAY } );

          Note:

          This procedure is overloaded. The column_list and column_table parameters are mutually

          exclusive.

HTH. Pete

Andreas Michler wrote:

> Yes your are right.
> Every table in every database should have 1 primary key.
> I.e. an replication under oracle does not work correcty on tables without
> pks.
>
> gmei_at_my-deja.com wrote:
>
> > Hi:
> >
> > We are designing a new oracle database for shop. We just had a long,
> > heated debate about whether we should create an independent Primary key
> > in join tables. Fox example:
> > We have three tables: UserTable, AccountTable, UserAccountTable. And we
> > want to support that a user can have several account and an account can
> > be owned by several users (join account).
> >
> > UserTable:
> > User_ID (PK)
> > User_FirstName
> > User_LastName
> > ....
> >
> > AccountTable:
> > Account_ID (PK)
> > Account_Name
> > ...
> >
> > As far as UserAccountTable goes, there are two options:
> >
> > 1. UserAccountTable:
> > User_ID (FK)
> > Account_ID (FK)
> >
> > The primary key in this table is the composite key which is made of
> > both User_ID and Account_ID.
> >
> > 2. UserAccountTable:
> > UserAccountID (PK)
> > User_ID (FK)
> > Account_ID (FK)
> >
> > Here you still have FK constraints, but you add one independent PK.
> >
> > I am for option 2. I think every table should have it's own independent
> > PK. The systems I designed and worked before always do that. It just
> > makes the DB admin work easier later (in case you might want to do
> > batch updates in the join table). But the frond end programmers are
> > against this, saying it creates extra complexity, and it will confuse
> > them when they do java code.
> >
> > I am a very open minded person and I am asking you, the experience db
> > guru, to give your opinion of what is the "better" option. What are
> > the potential problems later in each approach?
> >
> > The thing I am afraid of is that we made the decision now and 6 months
> > later we may need to change it. That will cause lots of problem because
> > there are too many places to change. I would rather to make
> > the "better" (or "correct") decision now and live with that.
> >
> > Thanks for your time and you help is appreciated.
> >
> > If you reply, please send a copy to zlmei_at_hotmail.com
> >
> > Guang
> >
> > Sent via Deja.com http://www.deja.com/
> > Before you buy.
>
> --
> -------------------------------------
> ADICOM Informatik GmbH
> Andreas Michler
> Wiesfleckenstr. 34
> 72336 Balingen
> Tel: 07433/9977-57,Fax: -90
> E-Mail: Andreas.Michler_at_adicom.de
> http:\\www.adicom.de
> -------------------------------------


Received on Thu Jan 13 2000 - 07:43:56 CST

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US