2010-06-07 2 views
0

Я новичком в SQL, и мне нужно, чтобы создать базу данных для продуктового магазина (не реально, просто назначений конечно)Сравнение строк между 2 таблицами

У меня есть два поля из разных таблиц - прилагаются цена - цена, которую магазин покупает у поставщика и цена, которая предоставляется клиентам

Как я могу сделать ограничение, гарантирующее, что поставленная цена ниже, чем цена, предоставляемая клиентам?

Соответствующие таблицы, которые у меня есть следующие:

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

При задании домашних заданий это считается хорошей формой, чтобы показать, что вы сделали до сих пор, и объяснить, где вы застряли. Два бита общего руководства: ответ будет несколько зависеть от продукта базы данных, который вы используете, и вы должны исследовать ограничения CHECK и, возможно, триггеры. –

ответ

2

Для MS SQL Server вы не можете использовать СНЕСК, если вы хотите, чтобы сравнить данные в другой таблице.

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

Информации о триггерах можно найти here

+0

No - Для домашней работы они, скорее всего, просто предполагают, что эти ограничения возможны независимо от отсутствия поддержки РСУБД. По крайней мере, это мой курс! –

+2

Действительно? В чем смысл? Вы в основном делаете это, когда идете вперед. – codingbadger

+0

Я думаю, что для моего курса это было связано с тем, что SQL-стандарт позволяет это. Но на самом деле его задача выглядит значительно более конкретной, чем просто «написать контрольное ограничение», поэтому ваш ответ, вероятно, более уместен, чем я думал. –

0

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

Смежные вопросы