powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Внешний ключ к нескольким таблицам
15 сообщений из 15, страница 1 из 1
Внешний ключ к нескольким таблицам
    #39476691
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, подскажите как поступить, имеется

1. таблица Attachment - содержит записи о файловых вложениях в форме BLOB и другую служебную инфу
Код: sql
1.
2.
3.
4.
5.
6.
7.
Attachment
{  ID:INTEGER; PK 
    NAME:VARCHAR(200);
    FILEBLOB:BLOB:
    RK_ID:INTEGER; //ссылка к полю ID таблиц Address и Input_Docs
    TYPE_RK_ID:INTEGER; //Тип документа - или обращение (TYPE_RK_ID=1) или входящий документ (TYPE_RK_ID=2) 
} 



2. Таблица Обращения, содержащая инфу о поступивших обращениях
Код: sql
1.
2.
3.
4.
Address
{  ID:INTEGER; PK 
    NAME:VARCHAR(200);
} 


3. Таблица Входящие документы, содержит инфу о входящих документах
Код: sql
1.
2.
3.
4.
Input_docs
{  ID:INTEGER; PK 
    NAME:VARCHAR(200);
} 


PK у таблиц Address, Input_docs поле ID первичный ключ, а вот поле RK_ID таблицы Attachment ссылающается на поле ID таблиц Address, Input_docs и с полем TYPE_RK_ID однозначно определяют принадлежность файла-вложения.

При попытке выполнить запрос и получить интересующее вложение:
Код: sql
1.
SELECT * from attachment where RK_ID=1 and TYPE_RK_ID=2;



Ожидание составляет порядка 3 минут.

Какие индексы в таблице Attachment следует завести дабы время выполнения запросы увеличилось?

Сейчас в таблице Attachment имеем поле ID с индексом как PK.
...
Рейтинг: 0 / 0
Внешний ключ к нескольким таблицам
    #39476701
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnetКакие индексы в таблице Attachment следует завести дабы время выполнения запросы увеличилось? Что, ещё увеличить? 3 минут мало?

А если таки уменьшить, то (RK_ID,TYPE_RK_ID) либо в обратном порядке.
...
Рейтинг: 0 / 0
Внешний ключ к нескольким таблицам
    #39476703
Darkripple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wsnet,
по моему - очевидно, что нужен составной индекс с полями RK_ID и TYPE_RK_ID. разве нет?
можно даже наверно уникальный ключ сделать, если у вас не будет несколько записей по этой паре.
...
Рейтинг: 0 / 0
Внешний ключ к нескольким таблицам
    #39476705
Darkripple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Darkripplewsnet,
можно даже наверно уникальный ключ сделать, если у вас не будет несколько записей по этой паре.
хотя скорее всего будет...
...
Рейтинг: 0 / 0
Внешний ключ к нескольким таблицам
    #39476706
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Darkripple,
Это очевидно, но вот в MySQL нельзя сделать поле FK, ссылающееся на две разных таблицы!
...
Рейтинг: 0 / 0
Внешний ключ к нескольким таблицам
    #39476707
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinawsnetКакие индексы в таблице Attachment следует завести дабы время выполнения запросы увеличилось? Что, ещё увеличить? 3 минут мало?

А если таки уменьшить, то (RK_ID,TYPE_RK_ID) либо в обратном порядке.


Уменьшить конечно, опечатка, а что вы имейте ввиду ?
...
Рейтинг: 0 / 0
Внешний ключ к нескольким таблицам
    #39476713
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот таким образом в MySQL создать индекс:

Код: sql
1.
CREATE INDEX in1 ON Attachment (RK_ID,TYPE_RK_ID) ;



Так верно будет ?
...
Рейтинг: 0 / 0
Внешний ключ к нескольким таблицам
    #39476720
Darkripple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wsnetDarkripple,
Это очевидно, но вот в MySQL нельзя сделать поле FK, ссылающееся на две разных таблицы!мы же вроде о создании индекса говорим, а не внешнего ключа?...
wsnetТак верно будет ?верно.
...
Рейтинг: 0 / 0
Внешний ключ к нескольким таблицам
    #39476724
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Darkripple,

Да, просто интересно, в MySQL вроде бы нельзя в данном случае создать внешний ключ ?
...
Рейтинг: 0 / 0
Внешний ключ к нескольким таблицам
    #39476726
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто интересно в каким случаи будут использоваться индексы если я попытаюсь сделать запрос вида:
Код: sql
1.
select * from address left join attachment on (address.ID=attachment.RK_ID AND attachment.TYPE_RK_ID=1)



или запрос
Код: sql
1.
select * from address left join attachment on (address.ID=attachment.RK_ID) WHERE attachment.TYPE_RK_ID=1
...
Рейтинг: 0 / 0
Внешний ключ к нескольким таблицам
    #39476728
Darkripple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wsnetДа, просто интересно, в MySQL вроде бы нельзя в данном случае создать внешний ключ ?
могу ошибаться, но что мешает в таблице Attachment создать два внешних ключа на каждую из таблиц?
...
Рейтинг: 0 / 0
Внешний ключ к нескольким таблицам
    #39476731
Darkripple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkripplewsnetДа, просто интересно, в MySQL вроде бы нельзя в данном случае создать внешний ключ ?
могу ошибаться, но что мешает в таблице Attachment создать два внешних ключа на каждую из таблиц?
извиняюсь (-: голова не тем забита. конечно такой ключ создавать нельзя.
...
Рейтинг: 0 / 0
Внешний ключ к нескольким таблицам
    #39476732
Darkripple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wsnetПросто интересно в каким случаи будут использоваться индексы если я попытаюсь сделать запрос вида: explain select ... даст ответ на вопрос
...
Рейтинг: 0 / 0
Внешний ключ к нескольким таблицам
    #39476733
Darkripple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wsnetПросто интересно в каким случаи будут использоваться индексы если я попытаюсь сделать запрос вида: ...
или запрос
Код: sql
1.
select * from address left join attachment on (address.ID=attachment.RK_ID) WHERE attachment.TYPE_RK_ID=1

в этом случае left join не имеет смысла, так как будет проверяться условие attachment.TYPE_RK_ID=1
...
Рейтинг: 0 / 0
Внешний ключ к нескольким таблицам
    #39476736
Darkripple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вообще надо отталкиваться от задачи.
если стоит задача вывести список адресов с указанием вложений там где они есть - то первый запрос. правда адреса будут повторяться если вложений будет несколько. и вообще я не могу придумать реальный пример, в котором такой запрос будет необходим.
а если нужен просто список вложений, с указанием address, к которому они относятся, то
Код: sql
1.
select * from attachment, address  WHERE address.ID=attachment.RK_ID and attachment.TYPE_RK_ID=1

обязательно использует этот индекс. правда только для attachment. по address-у будет полный перебор.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Внешний ключ к нескольким таблицам
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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