2010-06-07 7 views
0

Je suis nouveau à SQL et je dois construire une base de données pour une épicerie (pas réel, juste une affectation de cours)Comparer les lignes entre 2 tables

i ont deux champs de deux tables différentes - prix fournis - la prix que le magasin achète du fournisseur et prix donné aux clients

Comment puis-je faire une contrainte qui assure que le prix fourni est inférieur au prix donné aux clients?

Les tableaux pertinents que j'ai sont:

CREATE TABLE Supplied_Products(
[Supplier ID] Int NOT NULL Foreign Key References Suppliers, 
[Product ID] Int NOT NULL Foreign Key References Products, 
Price   Float NOT NULL, 
CHECK (Price>0), 
Constraint PK_Supplied_Products PRIMARY KEY([Supplier ID] ,[Product ID]) 
) 
CREATE TABLE Products(
[Product-ID] Int NOT NULL PRIMARY KEY, 
[Product Name] Varchar(20) NOT NULL, 
Price   Float NOT NULL, 
[Category-Name] Varchar(20) NOT NULL Foreign Key References Categories, 
[Weight]  Float NOT NULL, 
[Is Refrigirated] Varchar(1) DEFAULT 'N' 
CHECK ([Is Refrigirated] in('Y','N')),/* Is Refrigirated can be only Y-yes or N-no*/ 
CHECK (Price >0) 
) 
+1

Lorsque vous posez des questions sur les devoirs, il est considéré comme une bonne forme de montrer ce que vous avez fait jusqu'à présent et d'expliquer où vous êtes coincé. Deux conseils généraux: la réponse dépendra un peu du produit de base de données que vous utilisez, et vous devriez étudier les contraintes CHECK et peut-être les triggers. –

Répondre

2

Pour MS SQL Server, vous ne pouvez pas utiliser une contrainte CHECK si vous souhaitez comparer les données dans une autre table.

Dans ce scénario, je pense qu'un INSERT & UPDATE Trigger serait nécessaire pour vérifier la valeur en cours de mise à jour. Vous pouvez alors annuler la mise à jour/insérer si le prix du fournisseur est supérieur au prix du client.

Informations sur Déclencheurs se trouve here

+0

Non - Pour les devoirs, ils supposeront probablement que ces contraintes sont possibles, quel que soit le manque de support SGBDR. Au moins, c'est ce que mon cours a fait! –

+2

Vraiment? Quel est le but? Au fond, vous le composez au fur et à mesure. – codingbadger

+0

Je pense que pour mon cours c'était parce que le SQL Standard les autorise. Mais en réalité, sa tâche semble beaucoup plus concrète que de simplement "écrire une contrainte de vérification", de sorte que votre réponse est probablement plus appropriée que je ne le pensais. –

0

Vous pouvez utiliser des procédures stockées pour insérer et modifier des lignes dans les deux tables qui vérifie cette contrainte.

Questions connexes