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

Откуда:
Сообщений: 2
Добрый день.
Ситуация такова: Есть две таблицы, в одной(Users) поле id, во второй id_User связаны между собой один к одному, во второй таблице сохраняются сообщения, в id_User должен храниться айдишник юзера написавшего сообщение.
Если пользователь пытается написать несколько сообщений вываливается сообщение:
автор
Violation of PRIMARY KEY constraint 'PK_Messages'. Cannot insert duplicate key in object 'dbo.Messages'.
The statement has been terminated.

то есть во вторую таблицу нельзя вставить два одинаковых id.
Я понимаю так что это ограничение первичного ключа, как это ограничение снять, и можно ли снять вообще?
24 фев 12, 23:20    [12150705]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Ну так вы связали один к одному и теперь удивляетесь, что больше одного не получить?
24 фев 12, 23:22    [12150713]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение  [new]
iljy
Member

Откуда:
Сообщений: 8711
rodnimcckay,

интересно, с какого перепугу связь один-к-одному должна допускать существование нескольких записей? Че-то у вас в консерватории хрень какая-то
24 фев 12, 23:22    [12150714]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение  [new]
Crimean
Member

Откуда:
Сообщений: 13147
rodnimcckay,

для начала
sp_helpindex Messages
24 фев 12, 23:23    [12150718]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
rodnimcckay
Добрый день.
Ситуация такова: Есть две таблицы, в одной(Users) поле id, во второй id_User связаны между собой один к одному, во второй таблице сохраняются сообщения, в id_User должен храниться айдишник юзера написавшего сообщение.
Если пользователь пытается написать несколько сообщений вываливается сообщение:
автор
Violation of PRIMARY KEY constraint 'PK_Messages'. Cannot insert duplicate key in object 'dbo.Messages'.
The statement has been terminated.

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

Разберитесь сперва, вам связь один к одному нужна или многие к одному.
Вот что у вас происходит
use tempdb;
go
-- как сейчас у вас:
create table dbo.Users(id int not null primary key);
create table dbo.[Messages](id_User int not null , msg varchar(100));
alter table dbo.[Messages] add constraint pk_id_User primary key (id_User);
alter table dbo.[Messages] add constraint fk_Users_id_id_User foreign key (id_User) references dbo.Users(id);
go
insert into Users values (1);
insert into dbo.[Messages](id_User,msg) values (1,'mmm...doughnut');
go
-- ошибка: Нарушение "pk_id_User" ограничения PRIMARY KEY. Невозможно вставить повторяющийся ключ в объект "dbo.Messages".
insert into dbo.[Messages](id_User,msg) values (1,'mmm...duff beer');
go

Делаем многие к одному:
--удалить первичный ключ
alter table dbo.[Messages] drop constraint pk_id_User;
--сделать им что-нить дургое
alter table dbo.[Messages] add msgid int identity(1,1) primary key;
-- нет ошибки
insert into dbo.[Messages](id_User,msg) values (1,'mmm...duff beer');
-- проверяем таблицу [Messages]
select * from [Messages]
/*
id_User     msg					msgid
----------- -------------		----
1           mmm...doughnut		1
1           mmm...duff beer		2
*/

use tempdb;
go
drop table dbo.[Messages],dbo.Users
24 фев 12, 23:39    [12150767]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
rodnimcckay,

а, еще забыл уточнить, т.к. первичный ключ, по-умолчанию, на физическом уровне, имплементится как кластерный индекс, то когда будете удалять, уточните, таковой ли он в вашей системе? И если да, то учтите, как это скажется а) на времени обновления всех некластерных индексов б) на производительности некоторых запросов.
24 фев 12, 23:51    [12150803]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение  [new]
rodnimcckay
Member

Откуда:
Сообщений: 2
Удалил первичный ключ из второй таблицы все вроде работает. Всем спасибо.
25 фев 12, 00:55    [12150947]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить