|
|
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
Есть предложение перенести топик в подфорум "Проектирование БД". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 16:35:41 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
svnvladЕсть таблица категории и таблица подкатегории, идентифицирующая связь один к одному. Уже неверно. Связь эта -- один-ко-многим. Одна категория может иметь одну или несколько подкатегорий. Точнее, от нуля до бесконечного числа подкатегорий. svnvladЕсли удаляем категорию, каскадно удаляется подкатегория. Ну я бы на твоём месте вообще бы с каскадными удалениями не баловался. Опасная и вредная вещь... svnvladЕсли удаляем внешний родительскую запись категории, удаляется каскадно категория и подкатегория. Тут все нормально. Проблема в том, что если удалить запись auto_card, то подкатегория тоже удалится каскадно, а категория не удалится. Но категория без подкатегории не имеет смысла. Надо чтобы тоже удалялась. Можно ли сделать колцевую зависимость в обе стороны? В нижней таблице внешний ключ на верхнюю, в верхней - внешний ключ на нижнюю? Нет, нельзя, и не нужно, но ты этого пока ещё не понимаешь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 16:36:07 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
miksoftНет, вот так: Код: sql 1. 2. 3. 4. 5. 6. Т.е. предлагаете транспорт объединить категорией. Такой вариант уже рассматривал. Но дело в том еще, что у карточки авто, карточки вагона и др. есть еще дополнительные свои поля, отличающиеся друг от друга, кроме id тр.средства. Кстати, необходимость поля id тут тоже под вопросом. Так уж повелось, что у всех таблиц должен быть обязательно id. Это связано с техническими особенностями библиотеки работы со БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 16:37:29 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
MasterZivsvnvladЕсть таблица категории и таблица подкатегории, идентифицирующая связь один к одному. Уже неверно. Связь эта -- один-ко-многим. Одна категория может иметь одну или несколько подкатегорий. Точнее, от нуля до бесконечного числа подкатегорий. Это жесткая категоризация, у карточки груза не может быть одновременно автомобиля и вагона. может быть только что-то одно. Кроме того, один ко многим это бы означала, что могут существовать много auto_cargo_card, ссылающиеся на одну cargo_card. А это не так. Там только одна auto_cargo_card для каждой cargo_card. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 16:41:58 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
как написать триггер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 16:42:52 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
svnvladНо дело в том еще, что у карточки авто, карточки вагона и др. есть еще дополнительные свои поля, отличающиеся друг от друга, кроме id тр.средства.Их можно либо добавить в основную таблицу транспортных средств (но заполнять только нужные), либо выделить в отдельную EAV-таблицу. Кстати, а какая задача у всей системы? Это заявки (т.е. план на будущее), текущее состояние (настоящее) или исторические данные (прошлое) ? Если третье, то откуда вообще взялась операция удаления? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 16:43:27 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
MasterZivНу я бы на твоём месте вообще бы с каскадными удалениями не баловался. Опасная и вредная вещь... Это почему? Если аккуратно и внимательно ключи писать, то все нормально. MySQL глючит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 16:43:51 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
svnvladкак написать триггер? CREATE TRIGGER ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 16:44:19 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
svnvladMasterZivНу я бы на твоём месте вообще бы с каскадными удалениями не баловался. Опасная и вредная вещь... Это почему? Если аккуратно и внимательно ключи писать, то все нормально. MySQL глючит?Не то чтобы глючит, но имеет особенности. Например, при каскадном удалении не срабатывают триггера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 16:45:29 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
miksoftКстати, а какая задача у всей системы? Это заявки (т.е. план на будущее), текущее состояние (настоящее) или исторические данные (прошлое) ? Если третье, то откуда вообще взялась операция удаления? Текущее состояние. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 16:45:55 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
miksoftКстати, а какая задача у всей системы? Глобальная задача - показать процессы перегрузки грузов из одного транспортного средства в другое. Причем погрузиться они могут не за 1 шаг, а за несколько, например, чтобы погрузить вагон, нужно взять грузы с 3-х автомобилей. И отобразить эти процессы во времени... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 17:02:32 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
svnvlad, я незнаю сможешь ли ты в мускле настроить так внешние ключи, но то что не сможешь вставить данные это факт, при вставке в таблицу А она потребует наличия записи в Б, а в Б не сможешь вставить, ибо требуется наличие А можно конечно на момент вставки отключать проверку по внешнему ключу, и таки вставишь. но каскадное удаление опять вызовет ошибку. удаляешь запись в таблице А, мускл не дурак, видит, каскадно подготовить удаление из Б, но и тут мускл не дурак, понимает, что для удаления из Б надо каскадно из А и тут уже даже не будет смотреть что из А надо удалять то что он и так собирался, он сразу выдаст ошибку про зацикленность(про цикл) тоесть даже если у тебя А (id, fk_idb) B(id,fk_ida) и записи А 1, 2 2,3 Б 2,2 то при попытке удалиь записи из А с айди=1, получиться логический цикл, для удаления А, надо удалять из Б, а для удаления из Б приходиться удалять из А ...чисто изза этого мускл уже выдаст ошибку.несмотря даже на отсутсвие цикла в структуре данных(ссылках) так что ответ на твой вопрос - не сможешь. одна таблица обяза 1 - допускать значение нулл, дабы не приходилось постоянно отключать проверку по ключу. а то ведь как тогда контролировать целостность данных -ведь включение проверки не изменит того факта что уже могли навставлять лишние данные нарушив требование один к одному. и эта таблица каскадно не удаляеться. она и будет как бы чучуть главнее если говорить о парах человек - женщина человек - мущина то таблицей главнее должен стать человек. при удалении человека - мущина или женщина удаляеться каскадно, при удаленни мущины или женщины, удаление человека тригером(триге на после удаления)...думается на до если поставить, возникнет цикл - ибо удаление породит каскадное удаление в таблице где уже запущен тригер удаления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 12:17:34 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, Точно, точно. Была похожая задача и нарвался именно на этот момент. А надо было разделить одну таблицу, как и топик стартера на "общие поля зписи" и две и больше "специальных уточнений"... в конце концов ушел на EAV. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 22:38:11 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
Arhat109 в конце концов ушел на EAV. Что такое EAV? В общем решил проблему без триггера, а просто запросом на удаление из нескольких таблиц: Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2015, 01:46:59 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39040813&tid=1832736]: |
0ms |
get settings: |
4ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
22ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
28ms |
get tp. blocked users: |
1ms |
| others: | 183ms |
| total: | 257ms |

| 0 / 0 |
