Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Data Bases > Oracle Miscellaneous > Re: Primary Key...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 2 of 9 Topic 6966 of 7280
Post > Topic >>

Re: Primary Keys and Valid_From / Valid_To

by Thomas Olszewicki <ThomasO@[EMAIL PROTECTED] > Jun 24, 2008 at 05:49 AM

On Jun 24, 6:36=A0am, Hans Mayr <mayr1...@[EMAIL PROTECTED]
> wrote:
> Hello,
>
> I have basic questions on how one best organizes primary keys (and
> also foreign keys) and data integrity in an enviroment where one has
> valid_from / valid_to columns. Example:
>
> Say I have tables t_articles (article_id, article_name) and t_prices
> (article_id, currency, price). Then I would create a primary key on
> t_prices on article_id and currency. Oracle will make sure that
> article_id and currency are unique. And it will make data access on
> t_prices faster through the associated index. If I have a table
> t_orders (order_id, order_date, article_id, currency) I can make shure
> through a foreign key that (article_id, currency) exist in t_prices.
> Everything is wonderful.
>
> But now I want the prices to change and I introduce two new columns
> valid_from and valid_to in t_prices. Suddenly I loose a lot of the
> power of keys:
>
> * I have to make sure that the intervals [Valid_from, Valid_to] do not
> intersect.
> * A primary key (article_id, currency, valid_from) on t_prices is not
> clean (in my understanding) because I actually do not identify one
> line by this tripple but by article_id, currency and date (e.g.
> order_date) "between valid_from and valid_to".
> * I can not use a foreign key anymore to make sure that there is
> exactly one price / currency for each entry in t_orders.
>
> How does one solve these problems? Is there a way to reactive the
> power of primary and foreign keys? Or do I have to go through
> triggers?
>
> And just to make sure that there is no misunderstanding: My example
> given above is just an example to illustrate the problem and if one
> really had to work with orders, articles and prices one might solve it
> differently.
>
> Thanks and best,
>
> Hans

Hans,
There are probably many different designs to work with different
currencies and effective date pricing.
I would continue with your design, with small modifications.
t_articles (article_id, article_name)
    PK article_id
t_prices (article_id, currency)
    PK article_id, currency , FK: t_articles (article_id)
t_eff_prices (article_id, currency,effective_date,price)
    PK article_id, currency,effective_date FK: t_prices
(article_id,currency)
t_orders (order_id, order_date, article_id, currency)
    PK order_id (?) , FK: t_prices (article_id,currency)

In the table t_eff_prices use effective date instaed of Date_from and
Date_to.
New row in this table with new effective date automatically gives you
new "date_to"
You don't have to worry about overlapping periods.

HTH
Thomas
 




 9 Posts in Topic:
Primary Keys and Valid_From / Valid_To
Hans Mayr <mayr1972@[E  2008-06-24 03:36:41 
Re: Primary Keys and Valid_From / Valid_To
Thomas Olszewicki <Tho  2008-06-24 05:49:09 
Re: Primary Keys and Valid_From / Valid_To
Hans Mayr <mayr1972@[E  2008-06-24 07:34:53 
Re: Primary Keys and Valid_From / Valid_To
Frank van Bortel <fran  2008-06-24 21:52:15 
Re: Primary Keys and Valid_From / Valid_To
Thomas Olszewicki <Tho  2008-06-24 13:03:47 
Re: Primary Keys and Valid_From / Valid_To
Frank van Bortel <fran  2008-06-24 22:21:46 
Re: Primary Keys and Valid_From / Valid_To
Thomas Kellerer <FJIFA  2008-06-24 23:15:23 
Re: Primary Keys and Valid_From / Valid_To
Robert Klemme <shortcu  2008-06-25 07:50:10 
Re: Primary Keys and Valid_From / Valid_To
Hans Mayr <mayr1972@[E  2008-06-25 02:02:05 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Wed Dec 3 0:42:25 CST 2008.