Есть таблица в ней два первичных ключа 1)int 2)VARCHAR. Когда делаю связь используя только ключ типа int все работает. Когда хочу использовать один ключ типа VARCHAR MySQL выдает ошибку. А когда в этом же места использую два ключа ошибки нет. То есть внешний ключ VARCHAR в одиночку работать не хочет. Как это исправить ?
Первичный ключ может быть только один. На то он и называется "первичный". Если в среде помечены 2 поля как первичные - это значит, что у нас _составной_ первичный ключ. О том, что такое составные индексы и в чем их плюсы/минусы... можно найти в интернете
То есть, по тому что смог найти: их надо использовать одновременно, но вот проблема мне id клиента в таблице заказы 1С придется все время 0 ставить. А удалить эту строку у меня не получаеться ( ошибка 150 ). Интересно, что int один можно использовать, а VARCHAR нет.
а он тогда может быть внешним ключом ? Добавлено спустя 2 минуты 41 секунду: Как мне тогда таблицы связать? Мне необходимо, потом делать выборку из заказы 1с по коду клиента.
а накидать пару таблиц для теста? ну реально. если не может, то быстрее наткнуться на неудачу в процессе теста чем ждать когда на форуме ответят. не? вот это вообще неизвестная для меня фраза. ну то есть а в чем проблема?
вот это вообще неизвестная для меня фраза. ну то есть а в чем проблема?[/quote] ну смотрите, внешним ключом может быть только первичный ключ таблицы от которой исходит связь, если я делаю код уникальным, то он становиться обычным атрибутом. И связь делаю по id клиента. В итоге ничего не получаеться. Так как принадлежность заказа к определенному клиенту, определяется через код клиента Добавлено спустя 14 минут 35 секунд: С уникальным значением прокатило, отображает как внешний ключ вот только не знаю правильно ли будет работать.
а что может работать неправильно-то? есть сколько-то строк. по ним индекс. уникальный. значит значений может быть только одно на всю таблицу. ок. что такое первичный ключ? это индекс уникально ссылающийся на каждую строку. то есть такой же уникальный индекс. значит уникальный индекс это тот же первичный но без признака первичности. далее. если мы вдруг решили работать с первичным ключом то что вдруг должно пойти не так при работе с уникальным? я пока не понимаю откуда опасения. может быть задачу подробнее и больше информации о логике базы данных?
Дело не в том - int или varchar, а в том - какое поле первое в составном ключе, какое - второе. На самом деле в MySQL это не так, она дозволяет внешние ключи на не первичные ключи делать... но, имхо, лучше этим не злоупотреблять. А зачем вам внешний ключ на код клиента? Клиент польностью идентифицируется его ID. Если у вас есть _разные_ клиенты с одинаковым ID но разным кодом - вам нужно иначе базу строить. Но пока не ясно - что такое код и нафига он тут - ничего советовать смысла нет.
Код клиента нужен для того, чтобы при занесении данных из 1С, понимать чей это заказ. Приложении клиент может сам совершить заказ ( я эти заказы идентифицирую по id клиента ) и просмотреть заказы из 1с ( их связываю с клиентами по коду клиента )
В таком случае код клиента нужен только в таблице клиента, в таблице заказов он не нужен и никаких внешних ключей на него не нужно.
а как тогда связать таблицы клиенты и заказы 1с. При синхронизации придется для каждого заказа по коду клиента этого заказа из таблицы клиенты брать id ? Мне кажется это слишком муторно. У меня клиент может просматривать свои заказы 1с в ЛК, по своему коду.