Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как реализовать связь один к одному? / 25 сообщений из 26, страница 1 из 2
22.05.2020, 20:43
    #39960871
AnnitaBells
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать связь один к одному?
Есть две таблицы. В каждой по полю, которое заполняю автоинкрементом. Надо реализовать тестовые данные для связи один к одному.
Я предполагаю сделать так: взять таблицу, в которой меньше записей и случайным образом соединить их с записями из второй таблицы. Но как это сделать средствами MySQL не знаю.
...
Рейтинг: 0 / 0
22.05.2020, 21:20
    #39960877
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать связь один к одному?
Связь 1:1 - это теоретический измышлизм, который невозможно реализовать на практике. Реально это всегда 1:(0 или 1).

AnnitaBells
как это сделать средствами MySQL не знаю.
А версия-то у MySQL есть? и какая именно...
...
Рейтинг: 0 / 0
22.05.2020, 21:40
    #39960883
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать связь один к одному?
AnnitaBells,

в одной таблице добавим поле, делаем уникальный форейжн на автоинкремент другой таблицы.
...
Рейтинг: 0 / 0
22.05.2020, 21:54
    #39960884
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать связь один к одному?
AnnitaBells
в которой меньше записей
Если записей не одинаковое количество, то какой же "один к одному" ?
...
Рейтинг: 0 / 0
22.05.2020, 21:56
    #39960885
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать связь один к одному?
Akina
Связь 1:1 - это теоретический измышлизм, который невозможно реализовать на практике.
А два встречных внешних ключа разве не делают это?
...
Рейтинг: 0 / 0
22.05.2020, 21:59
    #39960889
AnnitaBells
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать связь один к одному?
Akina
А версия-то у MySQL есть? и какая именно...

5.1

Alex_Ustinov
AnnitaBells,
в одной таблице добавим поле, делаем уникальный форейжн на автоинкремент другой таблицы.

Там три таблицы. Хочу третью заполнить данными из первых двух.

table1 (t1ID number AI, ...)
table2 (t2ID number AI, ...)
table3 (t1ID, t2ID)

t1ID и t2ID заполняю автоматом, иногда удаляю записи, поэтому могут быть пробелы в данных. Как заполнить table3?
...
Рейтинг: 0 / 0
22.05.2020, 22:47
    #39960912
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать связь один к одному?
AnnitaBells,

по какой логике t1ID должен соответствовать t2ID ?
...
Рейтинг: 0 / 0
22.05.2020, 23:00
    #39960915
AnnitaBells
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать связь один к одному?
miksoft,

Записи связываются случайным образом, главное, чтобы t1ID сотоветствовал одному и только одному t2ID (а t2ID соответствовал одному и только одному t1ID).
...
Рейтинг: 0 / 0
23.05.2020, 00:18
    #39960945
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать связь один к одному?
miksoft
А два встречных внешних ключа разве не делают это?
Делают... только без права вставки, ибо любой INSERT упрётся в отсутствие связанной записи. А нахрена нужна связь при Read-only?
...
Рейтинг: 0 / 0
23.05.2020, 10:46
    #39960992
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать связь один к одному?
Akina
только без права вставки

Не обязательно.
Может быть сервисная запись с id=0, на которую будет ссылаться создаваемая запись и в которой затем fk будет обновляться.
...
Рейтинг: 0 / 0
23.05.2020, 11:06
    #39960994
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать связь один к одному?
AnnitaBells

Там три таблицы. Хочу третью заполнить данными из первых двух.

table1 (t1ID number AI, ...)
table2 (t2ID number AI, ...)
table3 (t1ID, t2ID)

t1ID и t2ID заполняю автоматом, иногда удаляю записи, поэтому могут быть пробелы в данных. Как заполнить table3?
так в чем проблема, так и не понял. Уникальный ключ на (t1ID, t2ID) триггера на удаление из таб1 и таб2
...
Рейтинг: 0 / 0
23.05.2020, 12:06
    #39961005
AnnitaBells
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать связь один к одному?
Alex_Ustinov,

нужен insert into table3 select ... from ... (хитрый запрос из первой и второй, смысл я писала в первом сообщении "взять таблицу, в которой меньше записей, и случайным образом соединить эти записи с записями из второй таблицы")
Данные уже есть в таблицах. Зачем триггер?
...
Рейтинг: 0 / 0
23.05.2020, 12:06
    #39961006
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать связь один к одному?
Akina
miksoft
А два встречных внешних ключа разве не делают это?
Делают... только без права вставки, ибо любой INSERT упрётся в отсутствие связанной записи. А нахрена нужна связь при Read-only?
В Оракле, например, существуют deferred constraints, которые проверяются в момент коммита, а не инесерта.

В MySQL можно попробовать, если внешние ключи делать на разных парах полей.
...
Рейтинг: 0 / 0
23.05.2020, 12:17
    #39961009
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать связь один к одному?
AnnitaBells
нужен insert into table3 select ... from ... (хитрый запрос из первой и второй, смысл я писала в первом сообщении "взять таблицу, в которой меньше записей, и случайным образом соединить эти записи с записями из второй таблицы")
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
INSERT INTO table3 (t1ID, t2ID)
SELECT 
(SELECT @i1 := @i1 + 1 AS row_number1, your_table.t1ID 
FROM table1 , (select @i1:=0) AS z1) t1
JOIN
(SELECT @i2 := @i2 + 1 AS row_number2, your_table.t2ID
FROM table2 , (select @i2:=0) AS z2) t2
ON t1.row_number1=t2.row_number2


Но записей получится столько, сколько в меньшей таблице.
...
Рейтинг: 0 / 0
23.05.2020, 13:04
    #39961022
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать связь один к одному?
Alibek B.
Может быть сервисная запись с id=0, на которую будет ссылаться создаваемая запись
Сервисная запись - это тем не менее запись. И она либо будет 1:0 до вставки, либо 1:2 посередине процесса.
miksoft
В Оракле, например, существуют deferred constraints, которые проверяются в момент коммита, а не инесерта.

В MySQL можно попробовать, если внешние ключи делать на разных парах полей.
Связь 1:1 - это не когда МОЖНО создать записи, связанные 1:1, а когда НЕЛЬЗЯ создать записи, НЕ соответствующие этому соотношению.
...
Рейтинг: 0 / 0
23.05.2020, 13:18
    #39961026
AnnitaBells
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать связь один к одному?
miksoft
Но записей получится столько, сколько в меньшей таблице.

Подправила и получила именно то, что хотела. Спасибо! Ещё добавила rand().
...
Рейтинг: 0 / 0
23.05.2020, 14:00
    #39961034
AnnitaBells
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать связь один к одному?
miksoft,

а не могли бы Вы мне подсказать, что делать со связью один ко многим? 22138133 Спасибо!
...
Рейтинг: 0 / 0
23.05.2020, 15:59
    #39961053
Нестандартное мышление
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать связь один к одному?
AnnitaBells
miksoft,

а не могли бы Вы мне подсказать, что делать со связью один ко многим? 22138133 Спасибо!


В смысле? Что делать надо? Цель какая?

Один ко многим это PK и FK
...
Рейтинг: 0 / 0
23.05.2020, 16:22
    #39961061
AnnitaBells
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать связь один к одному?
Нестандартное мышление
AnnitaBells
miksoft,

а не могли бы Вы мне подсказать, что делать со связью один ко многим? 22138133 Спасибо!


В смысле? Что делать надо? Цель какая?

Один ко многим это PK и FK


Цель как и в первом случае заполнить третью таблицу данными из первых двух.
...
Рейтинг: 0 / 0
23.05.2020, 17:09
    #39961080
Нестандартное мышление
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать связь один к одному?
AnnitaBells
Нестандартное мышление
пропущено...


В смысле? Что делать надо? Цель какая?

Один ко многим это PK и FK


Цель как и в первом случае заполнить третью таблицу данными из первых двух.


В связи один ко многим не надо 3 таблицы
Там используются 2. В одной - где одни, вторая - где многие

Вообще Вам зря посоветовали связь 1-1 делать через 3 таблицы

Черерез 3ю таблицу делается связь многие ко многим
...
Рейтинг: 0 / 0
23.05.2020, 17:14
    #39961083
Нестандартное мышление
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать связь один к одному?
Нестандартное мышление,

И вообще. Если связи 1-1, то почему в одной таблице не хранить?
...
Рейтинг: 0 / 0
23.05.2020, 17:44
    #39961099
AnnitaBells
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать связь один к одному?
Нестандартное мышление
Нестандартное мышление,

И вообще. Если связи 1-1, то почему в одной таблице не хранить?

Разные сущности.
...
Рейтинг: 0 / 0
23.05.2020, 17:46
    #39961101
Нестандартное мышление
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать связь один к одному?
AnnitaBells
Нестандартное мышление
Нестандартное мышление,

И вообще. Если связи 1-1, то почему в одной таблице не хранить?

Разные сущности.


Сущности чего? Если связь 1 в 1?
Поясните тогда, что Вы в разных таблицах храните?
...
Рейтинг: 0 / 0
23.05.2020, 18:11
    #39961109
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать связь один к одному?
AnnitaBells
Alex_Ustinov,

нужен insert into table3 select ... from ... (хитрый запрос из первой и второй, смысл я писала в первом сообщении "взять таблицу, в которой меньше записей, и случайным образом соединить эти записи с записями из второй таблицы")
Данные уже есть в таблицах. Зачем триггер?
см выше
авторt1ID и t2ID заполняю автоматом, иногда удаляю записи , поэтому могут быть пробелы в данных.
...
Рейтинг: 0 / 0
23.05.2020, 18:19
    #39961111
Нестандартное мышление
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать связь один к одному?
Alex_Ustinov
AnnitaBells
Alex_Ustinov,

нужен insert into table3 select ... from ... (хитрый запрос из первой и второй, смысл я писала в первом сообщении "взять таблицу, в которой меньше записей, и случайным образом соединить эти записи с записями из второй таблицы")
Данные уже есть в таблицах. Зачем триггер?
см выше
авторt1ID и t2ID заполняю автоматом, иногда удаляю записи , поэтому могут быть пробелы в данных.


Это ад какой то
Значит удаление неправильное. Мертвых записей море будет

А один ко многим - это вообще цирк с таким подходом будет

Можно без триггера, но тогда очень аккуратно логику UpdInsDel делать

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


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