Форум: "Базы";
Текущий архив: 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.04 c