USE MyDatabase
GO

————————————————————————
— Построить таблицы.
————————————————————————
CREATE TABLE dbo.Store (
	StoreCode 		char(4) 		NOT NULL ,
	storeName 		varchar(40) 	NOT NULL ,
	StoreAddress 	varchar(40) 	NULL ,
	StoreCity 		varchar(20) 	NULL ,
	StoreState 		char(2) 		NULL ,
	StoreZip 		char(5) 		NULL ,
	StorePhoto		image		NULL

BEGIN CALLOUT A
) ON MyDatabase_data  TEXTIMAGE_ON MyDatabase_image
END CALLOUT A

GO

CREATE TABLE dbo.Sale (
	SaleID	 	integer identity (1,1) NOT FOR REPLICATION ,
	StoreCode		char(4) 		NOT NULL ,
	SaleDate 		datetime 	NOT NULL DEFAULT(CURRENT_TIMESTAMP),
	SaleQty 		smallint 	NOT NULL ,
	SalePayTerms 	varchar (12) 	NOT NULL
		CONSTRAINT ck_sale_payterms CHECK (SalePayTerms in (?Net 30?,?Net 60?, ?On 
Invoice?))
) ON MyDatabase_data
GO

————————————————————————
— Создание ограничений первичного ключа.
————————————————————————
ALTER TABLE dbo.Store WITH NOCHECK

BEGIN CALLOUT B
ADD CONSTRAINT PK_StoreCode PRIMARY KEY  CLUSTERED (StoreCode) 
ON MyDatabase_data
END CALLOUT B

GO

ALTER TABLE dbo.Sale WITH NOCHECK
ADD CONSTRAINT PK_Sale PRIMARY KEY  NONCLUSTERED (SaleID) 
ON MyDatabase_data
GO

————————————————————————
— Создание ограничений внешнего ключа.
————————————————————————
ALTER TABLE dbo.Sale
    	ADD CONSTRAINT FK_Sale2Store  FOREIGN KEY (StoreCode)
		REFERENCES dbo.Store (StoreCode)
GO

————————————————————————
—  Создание некластерного индекса для ограничений внешнего ключа.
————————————————————————
CREATE INDEX idxfk_Sale2Store
	ON dbo.Sale (StoreCode)
WITH PAD_INDEX, FILLFACTOR = 90
ON MyDatabase_index
GO

————————————————————————
— Создание кластерного индекса.
————————————————————————

BEGIN CALLOUT C
CREATE CLUSTERED INDEX idc_Sale
	ON dbo.Sale (StoreCode, SaleID)
WITH PAD_INDEX, FILLFACTOR = 90
ON MyDatabase_data
END CALLOUT C

GO

——————————————
— Очистка.
——————————————

— Удалить существующие ограничения внешнего ключа.
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(?dbo.FK_Sale2Store?)
AND OBJECTPROPERTY(id, ?IsForeignKey?) = 1)
ALTER TABLE dbo.sale DROP CONSTRAINT FK_Sale2Store 
GO

— Удалить существующие таблицы.
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(?dbo.Sale?)
AND OBJECTPROPERTY(id, ?IsUserTable?) = 1)
DROP TABLE dbo.Sale
GO

IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(?dbo.Store?)
AND OBJECTPROPERTY(id, ?IsUserTable?) = 1)
DROP TABLE dbo.Store
GO

— Удалить существующую базы данных.
USE master
GO
DROP DATABASE MyDatabase
GO