Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];

Вниз

Классификаторы и их реализация.   Найти похожие ветки 

 
31512 ©   (2004-10-04 09:04) [0]

Здравствуйте. У меня возникла необходимость ввести в классификаторы в базе данных. Делаю это следующим образом:

create table [OBJECT_CLASSES]//Здесь перечислены все возможные классы
(
ID_CLASS int not null primary key,
CLASS_NAME nvarchar (50) not null default "Default class",
)

create table [OBJECTS] //Здесь объекты и их принадлежность определённым классам
(
ID_OBJECT int not null,
OBJECT_CLASS int not null references OBJECT_CLASSES (ID_CLASS),
AOBJECT_NAME nvarchar (500),
constraint UPKCL_OBJECTS primary key clustered (ID_OBJECT, OBJECT_CLASS)
)

//Здесь некая таблица, куда могут входить только объекты определённого класса, здесь первого.(Эдакая таблица свойств объекта)
create table [ORGANISATION](
ID_ORGANISATION int not null primary key,
AOBJECT int not null,
AOBJECT_CLASS int not null default 1,
ORGANISATION_ADRESS nvarchar (500),
.
.
//Тра-та-та
.
.
constraint FK_OBJECT_ foreign key (AOBJECT, AOBJECT_CLASS)
  references OBJECTS (ID_OBJECT, OBJECT_CLASS),
check (AOBJECT_CLASS = 1)
)

Несмотря на то, что это работает, вопросы такие возникли:
1. Существует ли встроенный механизм реализации классификаторов?
2. Как сделать так, чтобы поле AOBJECT_CLASS всегда принимало одно значение, ничем не изменяемое (константное поле)?
3. Можно ли вообще избежать применения классификаторов, решая задачу о разделении записей, которые можно вносить в отношения,и которые нельзя.

Спасибо.


 
ЮЮ ©   (2004-10-04 09:30) [1]

>Как сделать так, чтобы поле AOBJECT_CLASS всегда принимало одно значение

Прописать присвоение в триггере

З.Ы. Если выкинуть [OBJECT_CLASSES] и [OBJECTS], и оставить  
create table [ORGANISATION](
ID_ORGANISATION int not null primary key,
ORGANISATION_ADRESS nvarchar (500),
.
//Тра-та-та
.

то в таблице [ORGANISATION] и будут лишь "организации" и ничего другого


 
clickmaker ©   (2004-10-04 10:32) [2]


> 31512 ©   (04.10.04 09:04)

constraint UPKCL_OBJECTS primary key clustered (ID_OBJECT, OBJECT_CLASS) - я бы сделал ключ только по ID_OBJECT, а на OBJECT_CLASS повесил бы индекс для ускорения поиска.
Тогда и в этом не было бы необходимости
AOBJECT int not null,
AOBJECT_CLASS int not null default 1,
остался быть только AOBJECT

> 1. Существует ли встроенный механизм реализации классификаторов?

В MSSQL нет

> 2. Как сделать так, чтобы поле AOBJECT_CLASS всегда принимало
> одно значение, ничем не изменяемое (константное поле)?

check или триггер


 
clickmaker ©   (2004-10-04 10:37) [3]

Кстати, в твоем случае можно обойтись и без чека, и без триггера, если написать специальную команду или хранилку для вставки организации. Поле OBJECT_ID д.б. идентити. Что-то типа:

insert into Objects (OBJECT_CLASS, AOBJECT_NAME) values (1, @Orgname)

select @Object_ID = @@identity

insert into Organization (AOBJECT, ORG_ORGANISATION_ADRESS )
values (@Object_ID, "пр. Мира, 23")


 
31512 ©   (2004-10-04 11:53) [4]


> ЮЮ ©   (04.10.04 09:30) [1]

Задача немного другая. Например, в качестве потребителя может быть и организация и частное лицо, которое никак не организация. Вот я и подствлю его из таблицы OBJECTS. А класс уже потом легко определить.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.036 c
6-1093371499
Луарвик
2004-08-24 22:18
2004.10.31
IdHTTP: Метод Post: че-то с кодировкой?


4-1096311377
tytus
2004-09-27 22:56
2004.10.31
Директория?


1-1097760706
Volodja
2004-10-14 17:31
2004.10.31
Не добавляется TIcon в TImageList


1-1097847015
Анонимщик
2004-10-15 17:30
2004.10.31
Аппроксимация контура


14-1097551845
pkm
2004-10-12 07:30
2004.10.31
Виртуальный диск.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский