|
|
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
Есть таблица категории и таблица подкатегории, идентифицирующая связь один к одному. Категория имеет внешний ключ в одну сторону (типа CASCADE), подкатегория - внешний ключ в другую сторону (тоже CASCADE). Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Если удаляем категорию, каскадно удаляется подкатегория. Если удаляем внешний родительскую запись категории, удаляется каскадно категория и подкатегория. Тут все нормально. Проблема в том, что если удалить запись auto_card, то подкатегория тоже удалится каскадно, а категория не удалится. Но категория без подкатегории не имеет смысла. Надо чтобы тоже удалялась. Можно ли сделать колцевую зависимость в обе стороны? В нижней таблице внешний ключ на верхнюю, в верхней - внешний ключ на нижнюю? Если удаляется запись по внешнему ключу категории, то удаляется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 15:38:06 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
Здесь тоже каскадный ключ. Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 15:39:58 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
Чтоб проще понять: можно ли сделать вот так? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 15:46:06 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
Или еще проще, чтоб понятно было: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 15:47:28 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
svnvladНо категория без подкатегории не имеет смысла.Это почему это? Не знаю, что у вас за предметная область, но обычно в категории может быть несколько категорий, включая ноль. И если так, то зачем две таблицы? Почему не объединить в одну? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 15:48:04 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
miksoft, есть карточка груза, который может быть связан с автомобилем и с вагоном. если удаляется автомобиль, в котром лежал груз, то нет смысла и в этой карточке груза. так же и с вагоном. А верхняя таблица содержит общие поля, и на нее может быть в других таблицах одна ссылка, а не разные (№ вагона, № авто). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 15:53:51 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
svnvladесли удаляется автомобиль, в котром лежал грузЯ спрашивал про обратное направление. Если удалили груз, то зачем удалять весь автомобиль? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 15:57:50 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
miksoft, в общем вот: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 15:59:59 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
miksoftsvnvladесли удаляется автомобиль, в котром лежал грузЯ спрашивал про обратное направление. Если удалили груз, то зачем удалять весь автомобиль? вы не понимаете, автомобиль никто не удаляет. автомобиля на схеме не видно, так же как и сам груз. вот этот кортеж card_cargo - auto_card_cargo связывает груз и автомобиль. груз это по ссылке contract_cargo_sub_id, автомобиль по ссылке auto_card_id. Если удаляется груз, то обе вот эти таблицы должны удалиться, а если удаляется автомобиль, то тоже обе этих должны удалиться, потому что это как бы одна таблица. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 16:03:02 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
cargo_card и auto_cargo_card имеют общий id. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 16:06:28 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
автомобили находятся справа от правой таблицы, грузы - сверху от левой таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 16:07:15 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
чтобы обращаться одинаково и к карточкам груза автомобиля, и к карточкам груза вагона, была сделана объединяющая их категория. теперь понятно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 16:08:57 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
svnvladвы не понимаетеНе понимаю, поэтому и задаю дурацкие вопросы. Имхо, правильно спроектировать таблицы можно только зная предметную область и поставленную задачу. svnvladавтомобиля на схеме не видно, так же как и сам груз.Т.е. "карточка груза" - это не груз? Логично, да... svnvladЕсли удаляется груз, то обе вот эти таблицы должны удалиться, а если удаляется автомобиль, то тоже обе этих должны удалиться, потому что это как бы одна таблица.Тогда повторю вопрос - зачем две таблицы? Почему не объединить в одну? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 16:08:58 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
svnvladчтобы обращаться одинаково и к карточкам груза автомобиля, и к карточкам груза вагона, была сделана объединяющая их категория. теперь понятно?А зачем разделены таблицы автомобилей и вагонов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 16:10:27 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
miksoftТогда повторю вопрос - зачем две таблицы? Почему не объединить в одну? Потому что есть еще карточка вагона. А надо обращаться и к карточке автомобиля, и к карточке вагона одним способом, по одному полю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 16:10:33 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
Вы не знакомы, что такое идентифицирующее отношение, категоризация. Это не про "группа товара" и "товар". А про Человек - женщина, человек - мужчина. У женщины есть поле "Размер матки", у мужчины - "Размер простаты" )) А обращаться к ним хочется по одному полю Id_человека. так вот если вы удалите запись из поля мужчина, то запись в поле человек тоже надо удалять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 16:12:55 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
из таблицы вернее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 16:13:49 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
svnvladЭто не про "группа товара" и "товар". А про Человек - женщина, человек - мужчина. У женщины есть поле "Размер матки", у мужчины - "Размер простаты" )) А обращаться к ним хочется по одному полю Id_человека. так вот если вы удалите запись из поля мужчина, то запись в поле человек тоже надо удалять.Это не мешает сделать одну таблицу и заполнять только те поля, которые нужны/возможны для данного типа человека. В других СУБД можно даже констрейнт соответствующий наложить. В MySQL можно сделать аналог такого констрейнта триггером. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 16:16:10 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
svnvladmiksoftТогда повторю вопрос - зачем две таблицы? Почему не объединить в одну? Потому что есть еще карточка вагона. А надо обращаться и к карточке автомобиля, и к карточке вагона одним способом, по одному полю.А когда появятся самолеты и воздушные шары, будете еще таблицы создавать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 16:17:01 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
miksoft svnvladавтомобиля на схеме не видно, так же как и сам груз.Т.е. "карточка груза" - это не груз? Логично, да... Карточка груза - это маленькая партия (большого конкретного груза) в данном транспортном средстве. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 16:18:59 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
miksoftsvnvladпропущено... Потому что есть еще карточка вагона. А надо обращаться и к карточке автомобиля, и к карточке вагона одним способом, по одному полю.А когда появятся самолеты и воздушные шары, будете еще таблицы создавать? А вы предлагаете сделать так? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. При том, что ненулевое значение будет только в одном из полей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 16:22:51 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
Или еще веселей: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 16:26:29 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
svnvladmiksoftпропущено... Т.е. "карточка груза" - это не груз? Логично, да... Карточка груза - это маленькая партия (большого конкретного груза) в данном транспортном средстве.Если это партия, неделимая в процессе транспортировки, то у нас это называется "тарное место". Физически это обычно либо палетта, либо небольшой контейнер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 16:27:31 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
svnvladmiksoftпропущено... А когда появятся самолеты и воздушные шары, будете еще таблицы создавать? А вы предлагаете сделать так? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. При том, что ненулевое значение будет только в одном из полей?Нет, вот так: Код: sql 1. 2. 3. 4. 5. 6. Кстати, необходимость поля id тут тоже под вопросом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 16:30:22 |
|
||
|
Можно ли связать две таблицы 1 к 1 в обе стороны?
|
|||
|---|---|---|---|
|
#18+
svnvladИли еще веселей:Список полов человека, кстати, тоже непостоянен. В зависимости от предметной области, насколько я в курсе, их может быть от 2 до 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 16:32:32 |
|
||
|
Можно ли связать две таблицы 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?all=1&fid=47&tid=1832736]: |
0ms |
get settings: |
7ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
| others: | 203ms |
| total: | 361ms |

| 0 / 0 |
