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

Откуда:
Сообщений: 8
Здравствуйте!
У меня такая проблема.
Пишу курсовую работу. Уже столкнулась с проблемой при создании базы.
Имеется 18 таблиц. База данных "Больница". Появилась необходимость в создании составного первичного ключа на сущность «Назначения» – код истории болезни(PK,FK к истории болезни), код диагноза(PK,FK к справочнику диагнозов) и код назначения(PK,FK к спр-ку назначений). Т.к. назначение дается на историю болезни по диагнозу, их может быть несколько на одну историю болезни и на один диагноз.
Итак, прописала такие запросы:

create table naznachenie
(
IDistbol int not null,
ID_diagnoza int  not null,
IDNaznach int  not null,
IDvracha int  not null,
DataNachNaznach datetime not null,
DataOkonchNaznach datetime null,
PoryadokNazn char(30)  null
) ;


Объявление PK
alter table naznachenie
add constraint PK_naznachenie Primary KEy (IDistbol, ID_diagnoza,IDNaznach)
;

Объявление FK
alter table naznachenie
add constraint FK_naznachenie_spravochniknaznachenii
 Foreign key(IDNaznach) REFERENCES spravochniknaznachenii(IDNaznach)
;
alter table naznachenie
add constraint FK_naznachenie_spravochnikdiagnozov
 Foreign key(ID_diagnoza) REFERENCES spravochnikdiagnozov(ID_diagnoza)
;
alter table naznachenie
add constraint FK_naznachenie_istoryabolezni
 Foreign key(IDistbol) REFERENCES istoryabolezni(IDistbol)
;
alter table naznachenie
add constraint FK_naznachenie_spravochnikvrachei
 Foreign key(IDvracha) REFERENCES spravochnikvrachei(IDvracha)
;


Но вот при заполнении моей таблицы выходят ошибки. Таблица не заполняется, ни кодом, с помощью insert, ни вручную.

Помогите, пожалуйста...
18 мар 14, 19:00    [15748266]     Ответить | Цитировать Сообщить модератору
 Re: Составной ключ.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Revares
Но вот при заполнении моей таблицы выходят ошибки.

И вы их прочитали ?
18 мар 14, 19:01    [15748275]     Ответить | Цитировать Сообщить модератору
 Re: Составной ключ.  [new]
Revares
Member

Откуда:
Сообщений: 8
Glory,
да, прочитала.
Вот, что выводит сообщение 547, уровень 16.
Вот один из них.
Конфликт инструкции INSERT с ограничением FOREIGN KEY "FK_naznachenie_istoryabolezni". Конфликт произошел в базе данных "Bolnica1", таблица "dbo.istoryabolezni", column 'IDistbol'.
18 мар 14, 19:19    [15748379]     Ответить | Цитировать Сообщить модератору
 Re: Составной ключ.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Revares
Вот один из них.
Конфликт инструкции INSERT с ограничением FOREIGN KEY "FK_naznachenie_istoryabolezni". Конфликт произошел в базе данных "Bolnica1", таблица "dbo.istoryabolezni", column 'IDistbol'.

Ну так наверное нужно добавлять такие значения, которые не нарушают это самое ограничение ?
18 мар 14, 19:21    [15748388]     Ответить | Цитировать Сообщить модератору
 Re: Составной ключ.  [new]
Revares
Member

Откуда:
Сообщений: 8
или еще вот так:
Сообщение 2627, уровень 14, состояние 1, строка 2
Нарушение "PK_naznachenie" ограничения PRIMARY KEY. Невозможно вставить повторяющийся ключ в объект "dbo.naznachenie".

уже с PK
18 мар 14, 19:21    [15748391]     Ответить | Цитировать Сообщить модератору
 Re: Составной ключ.  [new]
Revares
Member

Откуда:
Сообщений: 8
Я вроде бы ввожу правильные данные.
К примеру:
insert into naznachenie values (001,1,2,1,'12/12/2008','12/12/2008', '3 raza v den')
18 мар 14, 19:24    [15748402]     Ответить | Цитировать Сообщить модератору
 Re: Составной ключ.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Revares
Я вроде бы ввожу правильные данные.

сервер имеет другое мнение

Revares
Нарушение "PK_naznachenie" ограничения PRIMARY KEY. Невозможно вставить повторяющийся ключ в объект "dbo.naznachenie".
уже с PK

И здесь совершенно однозначное описание - "Невозможно вставить повторяющийся ключ "
18 мар 14, 19:31    [15748426]     Ответить | Цитировать Сообщить модератору
 Re: Составной ключ.  [new]
_djХомяГ
Guest
Не по существу
1 а почему 001 вставляется в int (числовое) поле?
2 в таком формате '12/12/2008' даты запросто могут не правильно восприниматься SQL
По существу
Есть в istoryabolezni запись с IDistbol=1 - если нет отсюда и ругается
18 мар 14, 19:31    [15748428]     Ответить | Цитировать Сообщить модератору
 Re: Составной ключ.  [new]
Revares
Member

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

извини, что спрашиваю, может это элементарно, но я не знаю.
а что означает Невозможно вставить повторяющийся ключ?
18 мар 14, 19:36    [15748441]     Ответить | Цитировать Сообщить модератору
 Re: Составной ключ.  [new]
Revares
Member

Откуда:
Сообщений: 8
_djХомяГ,
да, такое значение есть, пыталась по другому, но, та же ситуация.
и с датой,кстати, тоже. Написала в формате 12-12-2008.
18 мар 14, 19:38    [15748447]     Ответить | Цитировать Сообщить модератору
 Re: Составной ключ.  [new]
Revares
Member

Откуда:
Сообщений: 8
Revares
Glory,

извини, что спрашиваю, может это элементарно, но я не знаю.
а что означает Невозможно вставить повторяющийся ключ?


*извините
18 мар 14, 19:39    [15748450]     Ответить | Цитировать Сообщить модератору
 Re: Составной ключ.  [new]
Revares
Member

Откуда:
Сообщений: 8
О_о, не знаю, как, но сработало.
Видимо,я затупила просто где-то)
все норм.
Спасибо за помощь!
18 мар 14, 19:43    [15748464]     Ответить | Цитировать Сообщить модератору
 Re: Составной ключ.  [new]
Сид
Member

Откуда: Москва
Сообщений: 305
Revares,

Если архитектура не спущена сверху, говорю о том, что неправильно.

Это не нужно:
DataOkonchNaznach datetime null, -- ибо важен только факт назначения. Или это дата-время выполнения?
PoryadokNazn char(30) null -- нет никаких порядков, причина та же
А если назначение отменяется, то как будете поступать?

Зато очень нужно и важно: Cito tinyint not null (можно bit). Ибо если Cito, то делать срочно (в первую очередь). Без этого назначения фактически бесполезны.
Для КТ, МРТ, Рентгена также требуется указание "с контрастным веществом" (или без).
В реальности также часто нужно обоснование назначения (на большинство инструментальных исследований).

Назначение также может содержать сразу несколько исследований.
Например: Биохимический анализ крови (основное), а внутри:
- Глюкоза
- Калий
- Креатинин
- Мочевая кислота
- Мочевина
- Натрий
- Общий белок
- Хлор
Это всё параметры одного и того же исследования. И это далеко не полный список.
И всё это дело будет готово одновременно.

Что касается PK, не нужно выдумывать естественный ключ. Одно и то же назначение может повторяться с течением времени. Иногда даже несколько раз в день. Пример - мониторинг тропонина. Так что не парьтесь и используйте суррогатный ключ.

Кстати, ни в коем случае никому не говорите, что данная архитектура позволит назначать лекарственные средства. Тут максимум - исследования.
24 мар 14, 18:39    [15779610]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить