Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
noway
Зарегистрирован: 15 Окт 2007 09:43:02 Сообщения: 11
|
Добавлено: 15 Ноя 2007 11:10:10 Заголовок сообщения: Составной primarykey |
|
|
Не могу разобраться, как использовать составной primaryKey в таблице. Объявить var $primaryKey = array('product_id','image'); не получается. А если объявить как перв.ключ одно поле а потом использовать
$this->save(array("product_id"=>'1',"image_path"=>'image'));
$this->save(array("product_id"=>'1',"image_path"=>'image2'));
то он начинает второй записью апдейтить первую, а не добавлять новую.
Как быть? |
|
Вернуться к началу |
|
|
ztalker
Зарегистрирован: 06 Ноя 2007 14:00:26 Сообщения: 26 Откуда: Новосибирск
|
Добавлено: 15 Ноя 2007 11:37:49 Заголовок сообщения: |
|
|
Сделай первичным ключ `id`, а поля `porduct_id` и `image_path` как индекс (если это вообще нужно). В таком случае второе действие добавит новую запись. _________________ На работу в Новосибирске требуется PHP программист, со знанием CakePHP. Пишите в личку. |
|
Вернуться к началу |
|
|
noway
Зарегистрирован: 15 Окт 2007 09:43:02 Сообщения: 11
|
Добавлено: 15 Ноя 2007 11:45:41 Заголовок сообщения: |
|
|
Это конечно хорошо, но пораждает избыточность =( |
|
Вернуться к началу |
|
|
ztalker
Зарегистрирован: 06 Ноя 2007 14:00:26 Сообщения: 26 Откуда: Новосибирск
|
Добавлено: 15 Ноя 2007 12:38:43 Заголовок сообщения: |
|
|
В чем избыточность? При хорошем построении БД каждая таблица должна содержать `id`.
`product_id`, как я понимаю, это у тебя сторонний ключ таблицы продуктов. В таком случаю у тебя есть id записи этой таблицы, чтобы эту запись идентифицировать, и id продукта чтобы определить к какому продукту относится эта запись.
Можно было бы сказать что есть избыточность, когда одной записи соответствует одна запись, тогда стоит подумать - делать `id` и `product_id`, когда по сути они будут хранить одно и тоже значение. Хотя и в таких вариантах я делаю id. _________________ На работу в Новосибирске требуется PHP программист, со знанием CakePHP. Пишите в личку. |
|
Вернуться к началу |
|
|
bunyan
Зарегистрирован: 15 Ноя 2007 14:57:37 Сообщения: 17
|
Добавлено: 15 Ноя 2007 15:05:48 Заголовок сообщения: |
|
|
В английской гугл-группе по кейку была пара дискуссий на эту тему. Вкратце: составной ключ в кейке можно использовать, если таблица является связкой в HABTM-ассоциации и содержит только два столбца. Если там хранятся дополнительные данные, то нужен один столбец в качестве первичного ключа. Обязательность наличия такового в любой таблице любой БД сомнительна, но в случае с кейком сомнений не вызывает, поскольку на этом построена вся его "автомагия".
Upd: первичный ключ здесь имеется в виду технический, конечно, т.е. INT AUTOINCREMENT
Последний раз редактировалось: bunyan (16 Ноя 2007 03:50:21), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
KPOTOB Гость
|
Добавлено: 15 Ноя 2007 20:11:11 Заголовок сообщения: |
|
|
bunyan
Вроде как при 'with' поле id не нужно и доп поля можно спокойно вписывать |
|
Вернуться к началу |
|
|
bunyan
Зарегистрирован: 15 Ноя 2007 14:57:37 Сообщения: 17
|
Добавлено: 16 Ноя 2007 03:58:59 Заголовок сообщения: |
|
|
Да, дополнительные поля можно использовать, но в тех документах, что я нашел, не было сказано про отсутствие id и возможность использования составного ключа вместо него. _________________ Блог о CakePHP |
|
Вернуться к началу |
|
|
|