Home > Archive > Microsoft SQL Server forum > August 2005 > Check Constraints or Triggers









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author Check Constraints or Triggers
sebastian.streiger@gmail.com

2005-08-26, 8:23 pm

Hi, I=B4m facing teh following situation:

This are just sample table names, but should do for discussing
purpouses.

Create table Invoice
(
InvoiceID Integer Not Null,
CustomerType Integer Not Null,
CustomerCode Integer Not Null,
Amount DECIMAL(10,2) Not Null,
.................
)

Create Table Type1Customer
(
CustomerCode Integer Not Null,
..=2E............................
)


Create Table Type2Customer
(
CustomerCode Integer Not Null,
..=2E............................
)

I need to add a way to restrict the CustomerType and CustomerCode,
in the Invoice table to the correct values.
This means that if customerType equals 1 the customerCode should be
checked against Type1Customer and if customerType equals 2 the
customerCode should be checked against Type2Customer.

I succesfully created a check constraint. That ensures that the valid
values exists when the rows in the Invoice table are inserted or
updated, but doesn=B4t prevent from deleting records from tables
Type1Customer and Type2Customer that are referenced from the Invoice
table.

Are triggers the only way to go?

Thanks in advance

Sebasti=E1n streiger

Erland Sommarskog

2005-08-26, 8:23 pm

(sebastian.streiger@gmail.com) writes:
> This are just sample table names, but should do for discussing
> purpouses.
>
> Create table Invoice (
> InvoiceID Integer Not Null,
> CustomerType Integer Not Null,
> CustomerCode Integer Not Null,
> Amount DECIMAL(10,2) Not Null,
> ................. )
>
> Create Table Type1Customer (
> CustomerCode Integer Not Null,
> .............................. )
>
>
> Create Table Type2Customer (
> CustomerCode Integer Not Null,
> .............................. )
>
> I need to add a way to restrict the CustomerType and CustomerCode,
> in the Invoice table to the correct values.
> This means that if customerType equals 1 the customerCode should be
> checked against Type1Customer and if customerType equals 2 the
> customerCode should be checked against Type2Customer.
>...
> Are triggers the only way to go?


With that data model, yes. But is that really the right data model?

I would rather have a CustomerCode table which could look like this:

CREATE TABLE CustomerCode (
CustomerType integer NOT NULL,
CustomerCode integer NOT NULL,
CONSTRAINT pk_CustomerCode(Cust
omerType, CustomerCode))

Then Invoices could refer to this table, and so could the child
tables Type1Customer and Type2Customer.


--
Erland Sommarskog, SQL Server MVP, esquel@sommarskog.se

Books Online for SQL Server SP3 at
http://www.microsoft.com/sql/techin.../2000/books.asp

AK

2005-08-26, 8:23 pm

In addition to Erland's suggestion,
I would recommend adding CustomerType to both Type1Customer and
Type2Customer, and adding CustomerType to their FK constraints

sebastian.streiger@gmail.com

2005-08-29, 7:23 am

Erland and AK:
Thank you for answering.
I DO agree that the model is no the best one that we can have. But due
to organizational issues I=B4m not in position to change the tables
structures by now. So, I=B4m trying to add constraints to ensure the
data consistency.


Thanks for your valuable feedback

Sponsored Links





Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive | Programming forum archive

Copyright 2008 droptable.com