Проверьте ограничение - все строки в таблице для каждого клиента <= 100% (PostgreSQL) - PullRequest
0 голосов
/ 09 августа 2010

У меня есть таблица, в которой хранятся категории категорий для клиентов. Количество категорий может измениться, но разбивка всегда должна быть меньше или равна 100% для каждого клиента.

custom     type_      pct  
-------    -------   -----  
Cust1      Type A    .33  
Cust1      Type B    .17  
Cust1      Type C    .50  
Cust2      Type A    .30  
Cust2      Type D    .10  
Cust2      Type E    .10  
Cust2      Type F    .50  

Любые идеи о том, как я могу добавить проверочное ограничение для обеспечения соблюдения этого правила?
Вот мое начало ...

ALTER TABLE cust_mix ADD CONSTRAINT ttl_pct_mix CHECK (SUM (pct) <= 1);  

Но это проверяет все строки, независимо от идентификатора клиента

Ответы [ 2 ]

2 голосов
/ 09 августа 2010

Вы не сможете достичь этого, просто добавив ограничение.Вам потребуется триггер после вставки / обновления, чтобы проверить это на стороне базы данных.

0 голосов
/ 09 августа 2010

Не уверен, возможно ли это в PostgreSQL, поскольку я использую только SQL Server, однако на самом деле вам не нужно проверять конкретный идентификатор клиента для проверки вашего ограничения. Вы можете просто проверить, что максимальная сумма действительна. Это может помочь поставить это в ваше ограничение.

Например:

(
    SELECT TOP 1
        SUM(pct)
    FROM
        cust_mix
    GROUP BY
        custom
    ORDER BY
        SUM(pct) DESC
) <= 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...