Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Создание ограничений / 9 сообщений из 9, страница 1 из 1
29.12.2008, 14:03:00
    #35739783
v009
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание ограничений
Здравствуйте.
Создаю базу данных Поликлиника для курсовика.
Подскажите как задать ограничение на дату рождения для mssql 2005.
Я пробую в программе PowerDesigner в Business Rule Properties / Expression
вот так (getdate()-data_rojdenija)>=16,not null
data_rojdenija - название столбца в таблице описания пациента
но при выполнении скрипта в mssql 2005 для создания базы он выдает ошибку на строчку
constrait CKC_DATA_ROJD_PACIENT check ((getdate()-data_rojdenija)>=16,not null)

Сообщение 128,уровень15,состояние 1,процедура CK_BIRTH_DAY,строка 3
имя "data_rojdenija" не разрешено в данном контексте.Допустимыми выражениями являются константы,константные выражения и (в некоторых контекстах)переменные.Имена столбцов не разрешены.
Т.е. понятно,что моя ошибка в использовании имени столбца data_rojdenija.
Как записать правильно?
...
Рейтинг: 0 / 0
29.12.2008, 16:56:31
    #35740218
Mr Marmelad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание ограничений
Коллега, а какой формат Вы выбрали для колоночки? Дату? Или всёжтки Вы не поленились и денормализовали дату рождения в "ВОЗРАСТ"? Если такое случилось то пожалуй следующий скрипт Вам поможет:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
ALTER TABLE Пациент
ADD Возраст tinyint;
GO
ALTER TABLE Пациент
ADD CONSTRAINT cc_ValidAge
CHECK (Возраст >  16  AND Возраст <  125 );
GO
...
Рейтинг: 0 / 0
29.12.2008, 17:08:57
    #35740263
Mr Marmelad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание ограничений
Почему я бы порекомендовал Вам именно такое решение - Тип данных datetime очень не прост в исполнении. То что предложили Вы в вашем примере работать по идее не будет ввиду отсутствия выделенного ГОДА:

Код: plaintext
1.
2.
3.
4.
ALTER TABLE [dbo].[Пациент]  WITH CHECK ADD  CONSTRAINT 
[CC_CheckBirthdate] CHECK  (((datepart(year,getdate())-datepart(year,[birthdate]))>( 16 )));
GO
ALTER TABLE [dbo].[Пациент] CHECK CONSTRAINT [CC_CheckBirthdate];
GO
...
Рейтинг: 0 / 0
29.12.2008, 17:56:26
    #35740383
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание ограничений
Такие вещи в базу данных нельзя класть,потому как как только поменяются данные ограничения,придется менять объект БД,посыпятся инвалидные объекты и всё такое. данную проверку надо делать либо на тригере, либо в ХП, а сами ограничения хранить в таблице БД.
...
Рейтинг: 0 / 0
29.12.2008, 18:12:09
    #35740428
Mr Marmelad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание ограничений
В Этих случаях мы используем калькулируемые (вычисляемые) аттрибуты. И применение их поддерживается большинством производителей баз. Поэтому совсем необязательно иметь структуру компилируемых объектов для поддержания динамики изменения величин. Хотя и такое решение имеет свои преимущества.
...
Рейтинг: 0 / 0
29.12.2008, 19:49:05
    #35740585
v009
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание ограничений
Спасибо ,попробую как Вы написали.
Хотя я еще такого не проходил)))
...
Рейтинг: 0 / 0
30.12.2008, 12:55:54
    #35741327
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание ограничений
To MrMarmelad - не понял не слова.объясните,если не трудно.
...
Рейтинг: 0 / 0
30.12.2008, 16:32:57
    #35741859
Mr Marmelad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание ограничений
ShtockTo MrMarmelad - не понял не слова.объясните,если не трудно.
Каков был вопрос - таков ответ. :) На самом деле если обращаться к Вашему посту, Коллега, [Такие вещи в базу данных нельзя класть] - я попытался высказать свой аргумент - [В базу данных можно класть всё] надо конечно уделять особенное внимание на большое количество "побочных" эффектов. например калькулируемые поля имеют тенденцию [в большинстве случаев] снижать производительность и оказывать негативный эффект на INSERT и UPDATE операции. Согласившись с Вами я указал что компилируемые объекты (триггеры и хранимки) частично устраняют этот негативный эффект. Недостатком их является наличие дополнительных (избыточных) объектов в базе.
...
Рейтинг: 0 / 0
31.12.2008, 11:50:24
    #35742550
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание ограничений
Понял Вашу мысль. Меня просто слово Калькулируемые атрибуты испугало вначале.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Создание ограничений / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]