|
Индексы в связующей таблицы многие ко многим
|
|||
---|---|---|---|
#18+
Добрый день! Подскажи пожалуйста. Как лучше индексировать таблицу, которая вляется связующей таблицей для связи многие ко многим? workbench автоматом создает индекс Primary и индекс для внешнего ключа на один из первичных ключей, но может есть более лучшие варианты такого использования? И правильно ли я понимаю, workbench автоматически созддает индекс Primary как кластерный индекс для таблицы? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 11:04 |
|
Индексы в связующей таблицы многие ко многим
|
|||
---|---|---|---|
#18+
Moneta13, Покажите DDL таблицы. По картинке непонятно из чего состоят ключи. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 12:18 |
|
Индексы в связующей таблицы многие ко многим
|
|||
---|---|---|---|
#18+
miksoft, при создании Форейжн ключа создаются примари, если их не было, отсюда и вопрос. Moneta13, это необходимое условие создания внешнего "ключа" workbench просто доделывает то что должно быть сделано ДО создания Форейжн кей foreign-key restrictions ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 12:29 |
|
Индексы в связующей таблицы многие ко многим
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 12:40 |
|
Индексы в связующей таблицы многие ко многим
|
|||
---|---|---|---|
#18+
Alex_Ustinov, то есть в связующей таблице не обязательно создавать какой-то индекс сверху? или можно создать составной индекс (музкант,роль)? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 12:41 |
|
Индексы в связующей таблицы многие ко многим
|
|||
---|---|---|---|
#18+
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, В старых версиях надо было бы во второй индекс включить поле FK_musicianRole_musician_musician_ID вторым по порядку. Moneta13 DDL я не создавал сам, мне надо сделать только схему workbench ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 14:17 |
|
Индексы в связующей таблицы многие ко многим
|
|||
---|---|---|---|
#18+
Moneta13, обычно делают отдельное поле Primary (идеологически другая роль у Primary) Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Все индексы кроме необходимых (как в случае Primary для Foreign Key в Референс поле) создаются по необходимости от дальнейших запросов ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 14:17 |
|
Индексы в связующей таблицы многие ко многим
|
|||
---|---|---|---|
#18+
кстати, такой синтаксис разве проходит? Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 14:24 |
|
Индексы в связующей таблицы многие ко многим
|
|||
---|---|---|---|
#18+
Alex_Ustinov Код: sql 1.
Так что со словом "обычно" не согласен. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 14:25 |
|
Индексы в связующей таблицы многие ко многим
|
|||
---|---|---|---|
#18+
Alex_Ustinov кстати, такой синтаксис разве проходит? Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 14:27 |
|
Индексы в связующей таблицы многие ко многим
|
|||
---|---|---|---|
#18+
кавычка да, но там же надо еще ЗПТ? Код: sql 1.
это же как отдельный CONSTRAINT в MySQL ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 14:34 |
|
Индексы в связующей таблицы многие ко многим
|
|||
---|---|---|---|
#18+
Alex_Ustinov но там же надо еще ЗПТ? https://dev.mysql.com/doc/refman/8.0/en/create-table-check-constraints.html Вообще: без запятой - корректно, это CHECK constraint поля. с запятой - корректно, это CHECK constraint таблицы. В данном случае - запятая обязательна. Constraint ссылается на два поля сразу - такой не может быть column constraint. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 14:38 |
|
|
start [/forum/topic.php?fid=47&fpage=10&tid=1828121]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 10ms |
total: | 145ms |
0 / 0 |