Re: check constraint question

From: CS_DBA <cs_dba(at)consistentstate(dot)com>
To: pgsql-general(at)postgresql(dot)org
Subject: Re: check constraint question
Date: 2014-04-08 22:12:00
Message-ID: 53447430.5020900@consistentstate.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general


On 04/08/2014 04:08 PM, Rob Sargent wrote:
> On 04/08/2014 03:53 PM, CS_DBA wrote:
>>
>> On 04/08/2014 03:41 PM, Rob Sargent wrote:
>>> On 04/08/2014 03:36 PM, CS_DBA wrote:
>>>>
>>>> On 04/08/2014 03:31 PM, Rob Sargent wrote:
>>>>> On 04/08/2014 03:26 PM, CS_DBA wrote:
>>>>>>
>>>>>> On 04/08/2014 03:17 PM, Rob Sargent wrote:
>>>>>>> On 04/08/2014 03:09 PM, CS_DBA wrote:
>>>>>>>>
>>>>>>>> On 04/08/2014 02:58 PM, Rob Sargent wrote:
>>>>>>>>> On 04/08/2014 02:51 PM, CS_DBA wrote:
>>>>>>>>>> Hi All
>>>>>>>>>>
>>>>>>>>>> we have a table like so:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> customer (
>>>>>>>>>> cust_id integer not null primary key,
>>>>>>>>>> cust_group_id integer not null,
>>>>>>>>>> group_account_id integer not null,
>>>>>>>>>> cust_name varchar not null,
>>>>>>>>>>
>>>>>>>>>> ...
>>>>>>>>>> )
>>>>>>>>>>
>>>>>>>>>> we want to force the cust_group_id to be unique across all
>>>>>>>>>> group_account_id's but not necessarily across the entire table
>>>>>>>>>>
>>>>>>>>>> I assume the best approach would be a check constraint yes?
>>>>>>>>>> Will this be excessively poor per performance if the table
>>>>>>>>>> gets big?
>>>>>>>>>>
>>>>>>>>>> Thoughts?
>>>>>>>>>>
>>>>>>>>>> Thanks in advance
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>> A unique index on cust_group_id and group_account_id doesn't
>>>>>>>>> do it for you?
>>>>>>>>>
>>>>>>>> oh right! duh! It's been one of those days....
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>> Which column goes first depends on your lookup expectations.
>>>>>>
>>>>>> Thanks!
>>>>>>
>>>>>>
>>>>>> Here's another one:
>>>>>>
>>>>>>
>>>>>> customer (
>>>>>> cust_id integer not null primary key,
>>>>>> cust_group_id integer not null,
>>>>>> group_account_id integer not null,
>>>>>> cust_name varchar not null,
>>>>>> cust_template_id integer,
>>>>>> ...
>>>>>> )
>>>>>>
>>>>>> If cust_template_id IS NOT NULL then it must reference a valid
>>>>>> cust_id
>>>>>>
>>>>>> Check constraint?
>>>>>>
>>>>>>
>>>>> Nope. Useless column :). You already have cust_id so
>>>>> cust_template_id is either null or already known.
>>>>
>>>> Actually its a goofy design in the web app... users can enter the
>>>> template_id on the fly and if they do we want to enforce the fact
>>>> that it's a valid cust_id (meaning any existing cust_id can be used
>>>> as a template but made up template ID's - meaning an id that does
>>>> not match an existing cust_id should be disallowed)
>>>>
>>>>
>>>> Thoughts?
>>>>
>>>>
>>> Really goofy. They could type in any valid cust_id, theirs or not
>>> theirs.
>>> What are you after with template_id. How would your app use it. Why
>>> would user fill it in?
>>>
>> Not sure yet (new client)... for now they simply want to force the
>> template column to be a valid cust_id, if it is not null... later
>> I'll be digging into their design and pushing them to make some db
>> architecture changes...
>>
>>
> So randomly set it to the cust_id :). I am not sure if a column and
> REFERENCE a column in same table. That you'll just have to lookup or
> try. But you probably need a check: is null or equals cust_id so they
> cannot randomly guess another cust_id. Are you sure this field
> shouldn't reference some as yet undefined template table?

I'll verify tomorrow... thx

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message David Johnston 2014-04-08 22:21:17 Re: check constraint question
Previous Message Rob Sargent 2014-04-08 22:08:02 Re: check constraint question