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

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

в одной таблице добавим поле, делаем уникальный форейжн на автоинкремент другой таблицы.
...
Рейтинг: 0 / 0
Как реализовать связь один к одному?
    #39960884
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnnitaBells
в которой меньше записей
Если записей не одинаковое количество, то какой же "один к одному" ?
...
Рейтинг: 0 / 0
Как реализовать связь один к одному?
    #39960885
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Связь 1:1 - это теоретический измышлизм, который невозможно реализовать на практике.
А два встречных внешних ключа разве не делают это?
...
Рейтинг: 0 / 0
Как реализовать связь один к одному?
    #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
Как реализовать связь один к одному?
    #39960912
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnnitaBells,

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

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


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


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

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


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


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

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

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

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

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

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

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

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


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

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

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


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

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

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

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


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