|
|
|
Не получается связать таблицы.
|
|||
|---|---|---|---|
|
#18+
Всем привет! Есть база данных warehouses . Далее создаю две таблицы Register и Operations. в Register назначаю поля для primary key: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. структура таблицы Operations: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. После пытаюсь назначить foreign key и references делаю: Код: sql 1. Выдает ошибку: Код: sql 1. Ткните где ошибся? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2013, 22:21:16 |
|
||
|
Не получается связать таблицы.
|
|||
|---|---|---|---|
|
#18+
Во-первых, foreign key должен ссылаться на первичный (или уникальный) ключ целиком, а не на его часть. Во-вторых, а почему в первой таблиц первичный ключ из кучи полей (явно в нем лишних), а во второй отсутствует полностью? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2013, 23:17:32 |
|
||
|
Не получается связать таблицы.
|
|||
|---|---|---|---|
|
#18+
авторВо-первых, foreign key должен ссылаться на первичный (или уникальный) ключ целиком, а не на его часть. Документация: Код: html 1. 2. Код: html 1. 2. 3. 4. 5. 6. Это не так случайно [index_type] = tbl_name ??? Странно а это что тогда? REFERENCES tbl_name (index_col_name,...) -- У меня вроде так же написано. Т.Е перечислять все поля которые принадлежат pr key таблицы Registry так:? Код: sql 1. авторВо-вторых, а почему в первой таблиц первичный ключ из кучи полей (явно в нем лишних), а во второй отсутствует полностью? Почему явно лишних ? Вот моя sql схема: автора во второй отсутствует полностью? А это обязательное условие? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2013, 23:54:41 |
|
||
|
Не получается связать таблицы.
|
|||
|---|---|---|---|
|
#18+
Dr.Hofmann, Уточнил в документации, формально требование не столько строгое. Ссылаться можно на первые (или все) колонки индекса. Однако есть специальная оговорка: http://dev.mysql.com/doc/refman/5.5/en/create-table-foreign-keys.html You are advised to use foreign keys that reference only UNIQUE (including PRIMARY) and NOT NULL keys. Второе, судя по представленной схеме, ссылка должна быть в обратную сторону, т.е. такая: Код: sql 1. А поле OperationId в таблице Operations должно быть первичным ключом. Третье, в таблице Register в первичном ключе достаточно поля id, особенно, если оно автоинкрементное. Другие поля втаскивать в первичный ключ не вижу никакого смысла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2013, 01:00:29 |
|
||
|
Не получается связать таблицы.
|
|||
|---|---|---|---|
|
#18+
Dr.Hofmann, Обычно отношение ставят следом за примари в referenced_table_name и связывают с примари в table_name, при этом referenced_column_name обязательно совпадает по типу с column_name и не обязательно но желательно проиндексировано в referenced_table_name. После чего добавляют fk по схеме и никаких проблем не испытывают. Будьте как все и полегчает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2013, 03:06:09 |
|
||
|
Не получается связать таблицы.
|
|||
|---|---|---|---|
|
#18+
miksoft Второе, судя по представленной схеме, ссылка должна быть в обратную сторону, т.е. такая: [src] alter table Register Operations add foreign key (OperationId) references Operations (OperationId); Я так понял здесь ошибка: alter table Register Operations??? add foreign key (OperationId) references Operations (OperationId); Вроде читал что должно появиться поле MUL столбец KEY в описании таблицы но чета ничего подобного не наблюдается. Как определяете что в таблице есть foreign key? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2013, 16:16:34 |
|
||
|
Не получается связать таблицы.
|
|||
|---|---|---|---|
|
#18+
Dr.HofmannmiksoftВторое, судя по представленной схеме, ссылка должна быть в обратную сторону, т.е. такая: Код: sql 1. Я так понял здесь ошибка: alter table Register Operations??? add foreign key (OperationId) references Operations (OperationId);Да, напутал при копипасте Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2013, 20:33:29 |
|
||
|
Не получается связать таблицы.
|
|||
|---|---|---|---|
|
#18+
авторТретье, в таблице Register в первичном ключе достаточно поля id, особенно, если оно автоинкрементное. Другие поля втаскивать в первичный ключ не вижу никакого смысла. Да действительно так - спасибо за совет. Вот переделал схему: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2013, 00:54:18 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38482720&tid=1835634]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 194ms |
| total: | 304ms |

| 0 / 0 |
