powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Индексы в связующей таблицы многие ко многим
12 сообщений из 12, страница 1 из 1
Индексы в связующей таблицы многие ко многим
    #40059266
Moneta13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Подскажи пожалуйста. Как лучше индексировать таблицу, которая вляется связующей таблицей для связи многие ко многим? workbench автоматом создает индекс Primary и индекс для внешнего ключа на один из первичных ключей, но может есть более лучшие варианты такого использования?
И правильно ли я понимаю, workbench автоматически созддает индекс Primary как кластерный индекс для таблицы?
...
Рейтинг: 0 / 0
Индексы в связующей таблицы многие ко многим
    #40059278
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Moneta13,

Покажите DDL таблицы.
По картинке непонятно из чего состоят ключи.
...
Рейтинг: 0 / 0
Индексы в связующей таблицы многие ко многим
    #40059286
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,
при создании Форейжн ключа создаются примари, если их не было, отсюда и вопрос.

Moneta13,
это необходимое условие создания внешнего "ключа"
workbench просто доделывает то что должно быть сделано ДО создания Форейжн кей
foreign-key restrictions
...
Рейтинг: 0 / 0
Индексы в связующей таблицы многие ко многим
    #40059288
Moneta13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft, DDL я не создавал сам, мне надо сделать только схему workbench, и по возможности расставить индексы.

CREATE TABLE IF NOT EXISTS `mydb`.`musician` (
`PK_musician_musician_ID` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(20) NOT NULL,
`surname` VARCHAR(45) NULL,
`birthday` DATE NOT NULL,
`beginDate` DATE NULL CHECK (beginDate > birthday`),
`endDate` DATE NULL CHECK (endDate <= beginDate),
PRIMARY KEY (`PK_musician_musician_ID`),
INDEX `name_surname` (`name` ASC, `surname` ASC) INVISIBLE,
INDEX `beginDate` (`beginDate` ASC) VISIBLE)
ENGINE = InnoDB

CREATE TABLE IF NOT EXISTS `mydb`.`role` (
`PK_role_role_ID` INT NOT NULL AUTO_INCREMENT,
`roleName` VARCHAR(45) NOT NULL,
PRIMARY KEY (`PK_role_role_ID`),
UNIQUE INDEX `roleName_UNIQUE` (`roleName` ASC) VISIBLE)
ENGINE = InnoDB

CREATE TABLE IF NOT EXISTS `mydb`.`musicianRole` (
`FK_musicianRole_musician_musician_ID` INT NOT NULL,
`FK_musicianRole_role_role_ID` INT NOT NULL,
PRIMARY KEY (`FK_musicianRole_musician_musician_ID`, `FK_musicianRole_role_role_ID`),
INDEX `roleId_idx` (`FK_musicianRole_role_role_ID` ASC) VISIBLE,
CONSTRAINT `musicianid`
FOREIGN KEY (`FK_musicianRole_musician_musician_ID`)
REFERENCES `mydb`.`musician` (`PK_musician_musician_ID`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `roleid`
FOREIGN KEY (`FK_musicianRole_role_role_ID`)
REFERENCES `mydb`.`role` (`PK_role_role_ID`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB
...
Рейтинг: 0 / 0
Индексы в связующей таблицы многие ко многим
    #40059289
Moneta13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Ustinov, то есть в связующей таблице не обязательно создавать какой-то индекс сверху? или можно создать составной индекс (музкант,роль)?
...
Рейтинг: 0 / 0
Индексы в связующей таблицы многие ко многим
    #40059317
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Moneta13,

Я правильно понимаю, что речь о таблице musicianRole ?

Moneta13
PRIMARY KEY (`FK_musicianRole_musician_musician_ID`, `FK_musicianRole_role_role_ID`),
INDEX `roleId_idx` (`FK_musicianRole_role_role_ID` ASC) VISIBLE,
Если у вас свежая версия MySQL, то этого достаточно.
В старых версиях надо было бы во второй индекс включить поле FK_musicianRole_musician_musician_ID вторым по порядку.

Moneta13
DDL я не создавал сам, мне надо сделать только схему workbench
Это плохо. Так Вы и сами не научитесь, и подсунуть могут кривоту какую-нибудь.
...
Рейтинг: 0 / 0
Индексы в связующей таблицы многие ко многим
    #40059318
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Moneta13,

обычно делают отдельное поле Primary (идеологически другая роль у Primary)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE IF NOT EXISTS `mydb`.`musicianRole` (
id Int Not Null AUTO_INCREMENT,
`FK_musicianRole_musician_musician_ID` INT NOT NULL,
`FK_musicianRole_role_role_ID` INT NOT NULL,
...
...
PRIMARY KEY (id),
UNIQUE KEY `TraTaTa` (`FK_musicianRole_musician_musician_ID`, `FK_musicianRole_role_role_ID`),

Все индексы кроме необходимых (как в случае Primary для Foreign Key в Референс поле)
создаются по необходимости от дальнейших запросов
...
Рейтинг: 0 / 0
Индексы в связующей таблицы многие ко многим
    #40059322
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, такой синтаксис разве проходит?

Код: sql
1.
`beginDate` DATE NULL CHECK (beginDate > birthday`),
...
Рейтинг: 0 / 0
Индексы в связующей таблицы многие ко многим
    #40059323
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov
Код: sql
1.
id Int Not Null AUTO_INCREMENT,

В данной таблице не вижу никакого смысла в этом. Разве что какая-нибудь кривая библиотека доступа, которая понимает первичные ключи только из одного поля.
Так что со словом "обычно" не согласен.
...
Рейтинг: 0 / 0
Индексы в связующей таблицы многие ко многим
    #40059324
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov
кстати, такой синтаксис разве проходит?

Код: sql
1.
`beginDate` DATE NULL CHECK (beginDate > birthday`),

Да, с кавычками что-то не так.
...
Рейтинг: 0 / 0
Индексы в связующей таблицы многие ко многим
    #40059326
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кавычка да, но там же надо еще ЗПТ?
Код: sql
1.
`beginDate` DATE NULL , CHECK (beginDate > birthday),

это же как отдельный CONSTRAINT в MySQL
...
Рейтинг: 0 / 0
Индексы в связующей таблицы многие ко многим
    #40059328
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov
но там же надо еще ЗПТ?

https://dev.mysql.com/doc/refman/8.0/en/create-table-check-constraints.html
Вообще:
без запятой - корректно, это CHECK constraint поля.
с запятой - корректно, это CHECK constraint таблицы.

В данном случае - запятая обязательна. Constraint ссылается на два поля сразу - такой не может быть column constraint.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Индексы в связующей таблицы многие ко многим
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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