Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.31;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.024 c
14-1097393645
Nick Denry
2004-10-10 11:34
2004.10.31
ActiveX и WinApi


4-1095787846
Асякин
2004-09-21 21:30
2004.10.31
Защита информации


4-1096337566
Laymer
2004-09-28 06:12
2004.10.31
Меню пуск.


14-1097606468
tox
2004-10-12 22:41
2004.10.31
Работа с плейлистами.


14-1097481073
panov
2004-10-11 11:51
2004.10.31
/OffTopic/