Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 обеспечение целостности  [new]
ОлегМ
Member

Откуда: Казань
Сообщений: 34
Привет всем !

Имеется n таблиц, в которых находятся скажем товары для продажи.
И имеются таблицы ShoppingCart и OrderDetails, где лежат купленные или ещё не купленные товары из этих таблиц. В них товары идентифицируются по Id и OrderType, котрый уникален для каждой из n таблиц.

Вопрос такой:
Как обеспечить целостность, т.е. чтобы при удалении из таблицы с товарами происходила проверка нет ли такой записи в ShoppingCart или OrderDetails.
С помощью Relatioship не получается. При помощи тригеров?
21 ноя 05, 15:55    [2090793]     Ответить | Цитировать Сообщить модератору
 Re: обеспечение целостности  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
С помощью Relatioship не получается.


Можно узнать, как именно "не получается"?
21 ноя 05, 16:08    [2090887]     Ответить | Цитировать Сообщить модератору
 Re: обеспечение целостности  [new]
ОлегМ
Member

Откуда: Казань
Сообщений: 34
во-первых я сделал у первой таблицы IDENTITY (101, 10),
у второй IDENTITY (102, 10) и у третьей IDENTITY (102, 10), чтобы у них не пересекались ID.
затем я связал каждый ID этих таблиц с ProductID таблицы OrderDetails, в которой также есть поле OrderType, которое для 1-ой таблицы равно 1, 2-ой таблицы равно 2 и.т.д.
Теперь при добавлении записи в OrderDetails, допустим из 1-ой таблицы происходит ошибка, что во второй таблице нет записи с таким ID-ником. ((
21 ноя 05, 16:21    [2090977]     Ответить | Цитировать Сообщить модератору
 Re: обеспечение целостности  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37100
ОлегМ
во-первых я сделал у первой таблицы IDENTITY (101, 10),
у второй IDENTITY (102, 10) и у третьей IDENTITY (102, 10), чтобы у них не пересекались ID.
затем я связал каждый ID этих таблиц с ProductID таблицы OrderDetails, в которой также есть поле OrderType, которое для 1-ой таблицы равно 1, 2-ой таблицы равно 2 и.т.д.
Теперь при добавлении записи в OrderDetails, допустим из 1-ой таблицы происходит ошибка, что во второй таблице нет записи с таким ID-ником. ((

И причем здесь Relatioship ?
21 ноя 05, 16:24    [2090994]     Ответить | Цитировать Сообщить модератору
 Re: обеспечение целостности  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Бррр... Ничего не понятно! %) Можете приветси скрипт создания таблиц и чего с чем должно быть связано?
21 ноя 05, 16:31    [2091037]     Ответить | Цитировать Сообщить модератору
 Re: обеспечение целостности  [new]
ОлегМ
Member

Откуда: Казань
Сообщений: 34
CREATE TABLE [Albums] (
	[AlbumId] [int] IDENTITY (101, 10) NOT NULL ,
	[AlbumName] [varchar] (100) COLLATE Cyrillic_General_CI_AS NOT NULL 	CONSTRAINT [PK_Albums] PRIMARY KEY  CLUSTERED 
	(
		[AlbumId]
	)  ON [PRIMARY] 
) ON [PRIMARY]


CREATE TABLE [Audio] (
	[AudioId] [int] IDENTITY (102, 10) NOT NULL ,
	[AlbumId] [int] NOT NULL CONSTRAINT [DF_Audio_AlbumId] DEFAULT (0),
	[AudioName] [varchar] (100) COLLATE Cyrillic_General_CI_AS NOT NULL 	CONSTRAINT [PK_Audio] PRIMARY KEY  CLUSTERED 
	(
		[AudioId]
	)  ON [PRIMARY] ,
	CONSTRAINT [FK_Audio_Albums] FOREIGN KEY 
	(
		[AlbumId]
	) REFERENCES [Albums] (
		[AlbumId]
	) ON DELETE CASCADE 
) ON [PRIMARY]


CREATE TABLE [Video] (
	[VideoId] [int] IDENTITY (100, 10) NOT NULL ,
	[Title] [varchar] (100) COLLATE Cyrillic_General_CI_AS NOT NULL CONSTRAINT [DF_Video_Title] DEFAULT (''),
	CONSTRAINT [PK_Video] PRIMARY KEY  CLUSTERED 
	(
		[VideoId]
	)  ON [PRIMARY] 
) ON [PRIMARY]
GO

CREATE TABLE [ShoppingCart] (
	[CartId] [int] IDENTITY (1, 1) NOT NULL ,
	[UserId] [int] NOT NULL CONSTRAINT [DF_ShoppingCart_UserId] DEFAULT (0),
	[OrderType] [int] NOT NULL CONSTRAINT [DF_ShoppingCart_OrderType] DEFAULT (0),
	[ProductId] [int] NOT NULL CONSTRAINT [DF_ShoppingCart_ProductId] 	CONSTRAINT [PK_ShoppingCart] PRIMARY KEY  CLUSTERED 
	(
		[CartId]
	)  ON [PRIMARY] ,
	CONSTRAINT [IX_ShoppingCart] UNIQUE  NONCLUSTERED 
	(
		[UserId],
		[OrderType],
		[ProductId]
	)  ON [PRIMARY] ,
	CONSTRAINT [FK_ShoppingCart_Albums] FOREIGN KEY 
	(
		[ProductId]
	) REFERENCES [Albums] (
		[AlbumId]
	),
	CONSTRAINT [FK_ShoppingCart_Audio] FOREIGN KEY 
	(
		[ProductId]
	) REFERENCES [Audio] (
		[AudioId]
	),
	CONSTRAINT [FK_ShoppingCart_Video] FOREIGN KEY 
	(
		[ProductId]
	) REFERENCES [Video] (
		[VideoId]
	)
) ON [PRIMARY]
21 ноя 05, 16:39    [2091085]     Ответить | Цитировать Сообщить модератору
 Re: обеспечение целостности  [new]
ОлегМ
Member

Откуда: Казань
Сообщений: 34
В общем решил проблемму с помощью тригеров на удаление.
21 ноя 05, 16:59    [2091190]     Ответить | Цитировать Сообщить модератору
 Re: обеспечение целостности  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
И зачем Вы разделили Аудио и Видео по разным таблицам? У Вас должна быть одна общая таблица товаров, с которой и вяжите ShoppingCart и OrderDetails. А доп. аттрибуты, относящиеся к определенному типу товара, храните в отдельной таблице для каждого типа товара, которая бы имела связь 1 к 1 с общей таблицей товаров.
21 ноя 05, 17:04    [2091211]     Ответить | Цитировать Сообщить модератору
 Re: обеспечение целостности  [new]
ОлегМ
Member

Откуда: Казань
Сообщений: 34
pkarklin
И зачем Вы разделили Аудио и Видео по разным таблицам? У Вас должна быть одна общая таблица товаров, с которой и вяжите ShoppingCart и OrderDetails. А доп. аттрибуты, относящиеся к определенному типу товара, храните в отдельной таблице для каждого типа товара, которая бы имела связь 1 к 1 с общей таблицей товаров.


Я согласен с Вами, просто это база проектировалсь изначально на продажу 3-х видов товара.
21 ноя 05, 17:07    [2091227]     Ответить | Цитировать Сообщить модератору
 Re: обеспечение целостности  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Это уже не принципиально! Принципиально, что их более 1 и разбивать эти виды на несколько таблиц неправильно.
21 ноя 05, 17:18    [2091294]     Ответить | Цитировать Сообщить модератору
 Re: обеспечение целостности  [new]
Timon
Member

Откуда: Dushanbe TJK
Сообщений: 2688
ХМ,
А если добавиться новый вид товаров, Вы что ещё таблицу будете добавлять?
Лично мне всё равно, но потом Вам с этим жить. Пока не поздо думаю стоит переделать.
22 ноя 05, 05:22    [2092406]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить