Нужен ли RedBean первичный ключ "id"?

Если вы используете RedBean ORM, вам нужно добавить первичный ключ с именем " id " в каждую таблицу в вашей базе данных?

в моей БД у меня есть несколько таблиц, которые имеют пары первичных ключей из 2 или 3 полей или первичные ключи с другими именами, чем " id "(да, я мог бы изменить имя на" id", но это не будет действительно отражать реальность, потому что они не являются идентификаторами)

пример:

table1-магазины сообщений:

  id           INTEGER      PRIMARY KEY AUTOINCREMENT,
  name         TEXT,
  title        TEXT,
  content      TEXT,

table2 - магазины мета для сообщений:

  post         INTEGER      DEFAULT 0,     # <- references "id" from "posts"
  name         TEXT,
  value        TEXT,
  PRIMARY KEY(name, post),
  CONSTRAINT posts_meta FOREIGN KEY(post)
    REFERENCES posts(id) ON DELETE CASCADE ON UPDATE RESTRICT

будет ли RedBean работать с такой структурой БД?

2 ответов


к сожалению, с тем, как ваша текущая структура таблицы, вы не можете использовать RedBean. Каждая таблица должна иметь первичный ключ с автоматическим приращением. Небольшое падение, поскольку это затрудняет интеграцию в уже существующий продукт.

несколько потоков, которые не смогли использовать RedBean из-за этого ограничения, с ответами от автора, Габора де Mooij:

http://groups.google.com/group/redbeanorm/browse_thread/thread/6d5582275326744f?pli=1

http://groups.google.com/group/redbeanorm/browse_thread/thread/4fa7b29b453dcdb8

RedBean не требует, чтобы поле первичного ключа называлось просто "id". Вы можете отформатировать имя столбца первичного ключа по своему вкусу с помощью formatBeanID() метод, как показано в примере ниже, который префиксами имени таблицы в "id" условно. ЭГ) в таблице users будет иметь первичный ключ users_id. Используя это форматирование, вы можете получить как можно более подробную информацию с именем id по мере необходимости.

http://redbeanphp.com/community/wiki/index.php/Prefixes

надеюсь, что это ограничение будет снято в будущем, поскольку оно действительно препятствует интеграции в существующие продукты.

EDIT: как альтернативный ORM, я хорошо слышал о доктрине: http://www.doctrine-project.org/. Я лично не использовал его, но, похоже, он является стандартом для многих, работающих с PHP.

EDIT 2: спасибо и кредит Джейсону за привлечение внимания к новому методу интеграции RedBean в существующий проект, где ваша база данных не может быть настроена для него. Я также хотел обновить свой ответ, если люди все еще ссылаются на него с этой проблемой. Габор предложил сделать виды, которые сопоставляются с таблицами, где вы можно настроить представление для правильной структуры, необходимой для RedBean. Я лично не тестировал это, но получил положительные отзывы от некоторых пользователей. Это добавляет некоторые дополнительные накладные расходы и обслуживание при изменении таблиц, но кажется лучшим и наиболее полным ответом на этот вопрос на сегодняшний день. http://www.redbeanphp.com/faq#beanformatter


принятый ответ не является строго истинным... Вы можете использовать существующую структуру таблиц , но вам нужно будет реализовать представление поверх каждой из таблиц, которое позволит вам переименовать столбец PKEY в "id"... См. это письмо от Габора-создателя RedBeanPHP:

https://groups.google.com/forum/#!searchin/redbeanorm/view/redbeanorm/wXUeT4Tj2uU/3AngnmVwZdYJ