powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Создание ограничений
9 сообщений из 9, страница 1 из 1
Создание ограничений
    #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
Создание ограничений
    #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
Создание ограничений
    #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
Создание ограничений
    #35740383
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такие вещи в базу данных нельзя класть,потому как как только поменяются данные ограничения,придется менять объект БД,посыпятся инвалидные объекты и всё такое. данную проверку надо делать либо на тригере, либо в ХП, а сами ограничения хранить в таблице БД.
...
Рейтинг: 0 / 0
Создание ограничений
    #35740428
Фотография Mr Marmelad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Этих случаях мы используем калькулируемые (вычисляемые) аттрибуты. И применение их поддерживается большинством производителей баз. Поэтому совсем необязательно иметь структуру компилируемых объектов для поддержания динамики изменения величин. Хотя и такое решение имеет свои преимущества.
...
Рейтинг: 0 / 0
Создание ограничений
    #35740585
v009
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо ,попробую как Вы написали.
Хотя я еще такого не проходил)))
...
Рейтинг: 0 / 0
Создание ограничений
    #35741327
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To MrMarmelad - не понял не слова.объясните,если не трудно.
...
Рейтинг: 0 / 0
Создание ограничений
    #35741859
Фотография Mr Marmelad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShtockTo MrMarmelad - не понял не слова.объясните,если не трудно.
Каков был вопрос - таков ответ. :) На самом деле если обращаться к Вашему посту, Коллега, [Такие вещи в базу данных нельзя класть] - я попытался высказать свой аргумент - [В базу данных можно класть всё] надо конечно уделять особенное внимание на большое количество "побочных" эффектов. например калькулируемые поля имеют тенденцию [в большинстве случаев] снижать производительность и оказывать негативный эффект на INSERT и UPDATE операции. Согласившись с Вами я указал что компилируемые объекты (триггеры и хранимки) частично устраняют этот негативный эффект. Недостатком их является наличие дополнительных (избыточных) объектов в базе.
...
Рейтинг: 0 / 0
Создание ограничений
    #35742550
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понял Вашу мысль. Меня просто слово Калькулируемые атрибуты испугало вначале.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Создание ограничений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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