powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Экземпляр сущности может быть экземпляром одной из двух других но не обоих сразу
11 сообщений из 11, страница 1 из 1
Экземпляр сущности может быть экземпляром одной из двух других но не обоих сразу
    #36301226
En_t_end
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
CREATE TABLE docs1(
attr1 integer,
attr2 text,
PRIMARY KEY(attr1)
);
CREATE TABLE docs2(
attr1 text,
attr3 text,
PRIMARY KEY(attr1)
);
CREATE TABLE documents(
id integer,
PRIMARY KEY(id)
);
CREATE TABLE documents_docs1(
id integer,
attr1 integer,
FOREIGN KEY(id) REFERENCE TO documents(id),
FOREIGN KEY(attr1) REFERENCE TO docs1(attr1),
PRIMARY KEY(id,attr1)
);
CREATE TABLE documents_docs2(
id integer,
attr1 text,
FOREIGN KEY(id) REFERENCE TO documents(id),
FOREIGN KEY(attr1) REFERENCE TO docs2(attr1),
PRIMARY KEY(id,attr1)
);
Суть в следующем. Один документ может быть либо документом из docs1 либо из docs2, но не может быть сразу из обоих. В приведенной выше схеме это важное условие нарушается. Так получилось, что изменять структуру docs1 и docs2 я не могу, но мне нужно создать сущность(documents), объединяющую разнородные docs1 и docs2.
Спасибо.
...
Рейтинг: 0 / 0
Экземпляр сущности может быть экземпляром одной из двух других но не обоих сразу
    #36301282
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
En_t_end,

а зачем последние 2 таблицы?
...
Рейтинг: 0 / 0
Экземпляр сущности может быть экземпляром одной из двух других но не обоих сразу
    #36301291
Esu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да ничего тут уже толком не сделаешь...
разве что какой-то view
в котором
select 1 as id_doc_type, * from docs1
union all
select 2 as id_doc_type, * from docs2

PK у него тогда композитный получится
id_doc_type+id таблицы docs1 или docs2
...
Рейтинг: 0 / 0
Экземпляр сущности может быть экземпляром одной из двух других но не обоих сразу
    #36301322
En_t_end
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Naf,
Попытка связать documents с docs1, docs2. В дальнейшем предполагается ссылаться в других таблицах именно на documents(id)
...
Рейтинг: 0 / 0
Экземпляр сущности может быть экземпляром одной из двух других но не обоих сразу
    #36301338
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почему так получилось, что не можешь менять структуру?
С уважением, Naf
...
Рейтинг: 0 / 0
Экземпляр сущности может быть экземпляром одной из двух других но не обоих сразу
    #36301369
En_t_end
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Naf,
Я работаю над плагином для Trac(SVN+Wiki+IssueTracker), там есть таблица wiki такой структуры:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE TABLE wiki(
    name text,
    version integer,
    time integer,
    author text,
    ipnr text,
    text text,
    comment text,
    readonly integer,
    PRIMARY KEY(name,version)
);
это docs2 в обозначениях этой темы, её я точно не могу изменять.
...
Рейтинг: 0 / 0
Экземпляр сущности может быть экземпляром одной из двух других но не обоих сразу
    #36301450
aston
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Триггеры в вашей СУБД имеются?
...
Рейтинг: 0 / 0
Экземпляр сущности может быть экземпляром одной из двух других но не обоих сразу
    #36301468
aston
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или CHECK CONSTRAINTS ?
...
Рейтинг: 0 / 0
Экземпляр сущности может быть экземпляром одной из двух других но не обоих сразу
    #36301568
En_t_end
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
astonИли CHECK CONSTRAINTS ?
Да, это sqlite версии 3.6.20.
...
Рейтинг: 0 / 0
Экземпляр сущности может быть экземпляром одной из двух других но не обоих сразу
    #36301616
aston
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE TABLE documents(
    id      integer     NOT NULL,
    attr1   integer     NULL,
    attr2   text        NULL,
    ...
FOREIGN KEY(attr1) REFERENCE TO docs1(attr1),
FOREIGN KEY(attr2) REFERENCE TO docs2(attr1),
PRIMARY KEY(id)
);
/

ALTER TABLE documents 
    ADD CONSTRAINT check_docs_refs (
        (attr1 IS NOT NULL AND attr2 IS NULL) 
            OR 
        (attr1 IS NULL AND attr2 IS NOT NULL)
);
/
...
Рейтинг: 0 / 0
Экземпляр сущности может быть экземпляром одной из двух других но не обоих сразу
    #36306492
En_t_end
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aston,
Спасибо, ваш вариант удачен
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Экземпляр сущности может быть экземпляром одной из двух других но не обоих сразу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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