powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Можно ли связать две таблицы 1 к 1 в обе стороны?
14 сообщений из 39, страница 2 из 2
Можно ли связать две таблицы 1 к 1 в обе стороны?
    #39040810
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть предложение перенести топик в подфорум "Проектирование БД".
...
Рейтинг: 0 / 0
Можно ли связать две таблицы 1 к 1 в обе стороны?
    #39040811
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladЕсть таблица категории и таблица подкатегории, идентифицирующая связь один к одному.


Уже неверно. Связь эта -- один-ко-многим. Одна категория может иметь одну или несколько подкатегорий.
Точнее, от нуля до бесконечного числа подкатегорий.

svnvladЕсли удаляем категорию, каскадно удаляется подкатегория.


Ну я бы на твоём месте вообще бы с каскадными удалениями не баловался. Опасная и вредная вещь...

svnvladЕсли удаляем внешний родительскую запись категории, удаляется каскадно категория и подкатегория. Тут все нормально.
Проблема в том, что если удалить запись auto_card, то подкатегория тоже удалится каскадно, а категория не удалится. Но категория без подкатегории не имеет смысла. Надо чтобы тоже удалялась.
Можно ли сделать колцевую зависимость в обе стороны? В нижней таблице внешний ключ на верхнюю, в верхней - внешний ключ на нижнюю?


Нет, нельзя, и не нужно, но ты этого пока ещё не понимаешь...
...
Рейтинг: 0 / 0
Можно ли связать две таблицы 1 к 1 в обе стороны?
    #39040813
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftНет, вот так:
Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE `cargo_card` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `contract_cargo_sub_id` int(11) unsigned NOT NULL,
  `траспортное_средство_card_id: integer,
  PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 PACK_KEYS=0;



Т.е. предлагаете транспорт объединить категорией. Такой вариант уже рассматривал. Но дело в том еще, что у карточки авто, карточки вагона и др. есть еще дополнительные свои поля, отличающиеся друг от друга, кроме id тр.средства.

Кстати, необходимость поля id тут тоже под вопросом.
Так уж повелось, что у всех таблиц должен быть обязательно id. Это связано с техническими особенностями библиотеки работы со БД.
...
Рейтинг: 0 / 0
Можно ли связать две таблицы 1 к 1 в обе стороны?
    #39040821
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivsvnvladЕсть таблица категории и таблица подкатегории, идентифицирующая связь один к одному.

Уже неверно. Связь эта -- один-ко-многим. Одна категория может иметь одну или несколько подкатегорий.
Точнее, от нуля до бесконечного числа подкатегорий.

Это жесткая категоризация, у карточки груза не может быть одновременно автомобиля и вагона. может быть только что-то одно.
Кроме того, один ко многим это бы означала, что могут существовать много auto_cargo_card, ссылающиеся на одну cargo_card. А это не так. Там только одна auto_cargo_card для каждой cargo_card.
...
Рейтинг: 0 / 0
Можно ли связать две таблицы 1 к 1 в обе стороны?
    #39040824
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как написать триггер?
...
Рейтинг: 0 / 0
Можно ли связать две таблицы 1 к 1 в обе стороны?
    #39040825
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladНо дело в том еще, что у карточки авто, карточки вагона и др. есть еще дополнительные свои поля, отличающиеся друг от друга, кроме id тр.средства.Их можно либо добавить в основную таблицу транспортных средств (но заполнять только нужные), либо выделить в отдельную EAV-таблицу.

Кстати, а какая задача у всей системы?
Это заявки (т.е. план на будущее), текущее состояние (настоящее) или исторические данные (прошлое) ?
Если третье, то откуда вообще взялась операция удаления?
...
Рейтинг: 0 / 0
Можно ли связать две таблицы 1 к 1 в обе стороны?
    #39040826
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНу я бы на твоём месте вообще бы с каскадными удалениями не баловался. Опасная и вредная вещь...

Это почему? Если аккуратно и внимательно ключи писать, то все нормально. MySQL глючит?
...
Рейтинг: 0 / 0
Можно ли связать две таблицы 1 к 1 в обе стороны?
    #39040828
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladкак написать триггер? CREATE TRIGGER
...
Рейтинг: 0 / 0
Можно ли связать две таблицы 1 к 1 в обе стороны?
    #39040830
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladMasterZivНу я бы на твоём месте вообще бы с каскадными удалениями не баловался. Опасная и вредная вещь...

Это почему? Если аккуратно и внимательно ключи писать, то все нормально. MySQL глючит?Не то чтобы глючит, но имеет особенности. Например, при каскадном удалении не срабатывают триггера.
...
Рейтинг: 0 / 0
Можно ли связать две таблицы 1 к 1 в обе стороны?
    #39040831
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftКстати, а какая задача у всей системы?
Это заявки (т.е. план на будущее), текущее состояние (настоящее) или исторические данные (прошлое) ?
Если третье, то откуда вообще взялась операция удаления?
Текущее состояние.
...
Рейтинг: 0 / 0
Можно ли связать две таблицы 1 к 1 в обе стороны?
    #39040856
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftКстати, а какая задача у всей системы?

Глобальная задача - показать процессы перегрузки грузов из одного транспортного средства в другое.
Причем погрузиться они могут не за 1 шаг, а за несколько, например, чтобы погрузить вагон, нужно взять грузы с 3-х автомобилей. И отобразить эти процессы во времени...
...
Рейтинг: 0 / 0
Можно ли связать две таблицы 1 к 1 в обе стороны?
    #39042320
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvlad,

я незнаю сможешь ли ты в мускле настроить так внешние ключи, но то что не сможешь вставить данные это факт, при вставке в таблицу А она потребует наличия записи в Б, а в Б не сможешь вставить, ибо требуется наличие А

можно конечно на момент вставки отключать проверку по внешнему ключу, и таки вставишь.
но каскадное удаление опять вызовет ошибку.

удаляешь запись в таблице А, мускл не дурак, видит, каскадно подготовить удаление из Б, но и тут мускл не дурак, понимает, что для удаления из Б надо каскадно из А и тут уже даже не будет смотреть что из А надо удалять то что он и так собирался, он сразу выдаст ошибку про зацикленность(про цикл)

тоесть даже если у тебя А (id, fk_idb) B(id,fk_ida)

и записи
А
1, 2
2,3

Б
2,2

то при попытке удалиь записи из А с айди=1, получиться логический цикл, для удаления А, надо удалять из Б, а для удаления из Б приходиться удалять из А ...чисто изза этого мускл уже выдаст ошибку.несмотря даже на отсутсвие цикла в структуре данных(ссылках)

так что ответ на твой вопрос - не сможешь.

одна таблица обяза 1 - допускать значение нулл, дабы не приходилось постоянно отключать проверку по ключу. а то ведь как тогда контролировать целостность данных -ведь включение проверки не изменит того факта что уже могли навставлять лишние данные нарушив требование один к одному.

и эта таблица каскадно не удаляеться. она и будет как бы чучуть главнее

если говорить о парах

человек - женщина
человек - мущина
то таблицей главнее должен стать человек.
при удалении человека - мущина или женщина удаляеться каскадно, при удаленни мущины или женщины, удаление человека тригером(триге на после удаления)...думается на до если поставить, возникнет цикл - ибо удаление породит каскадное удаление в таблице где уже запущен тригер удаления.
...
Рейтинг: 0 / 0
Можно ли связать две таблицы 1 к 1 в обе стороны?
    #39042890
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453,

Точно, точно. Была похожая задача и нарвался именно на этот момент. А надо было разделить одну таблицу, как и топик стартера на "общие поля зписи" и две и больше "специальных уточнений"... в конце концов ушел на EAV.
...
Рейтинг: 0 / 0
Можно ли связать две таблицы 1 к 1 в обе стороны?
    #39047569
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109 в конце концов ушел на EAV.
Что такое EAV?

В общем решил проблему без триггера, а просто запросом на удаление из нескольких таблиц:
Код: sql
1.
2.
3.
4.
5.
DELETE auto_card, auto_cargo_card, cargo_card
FROM auto_card
LEFT JOIN auto_cargo_card ON auto_cargo_card.auto_card_id = auto_card.id
LEFT JOIN cargo_card ON cargo_card.id = auto_cargo_card.id
WHERE auto_card.id = :auto_card_id
...
Рейтинг: 0 / 0
14 сообщений из 39, страница 2 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Можно ли связать две таблицы 1 к 1 в обе стороны?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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