Нужен ли RedBean первичный ключ "id"? - PullRequest
7 голосов
/ 04 марта 2012

Если вы используете 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 ]

10 голосов
/ 06 марта 2012

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

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

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.Используя это форматирование, вы можете получить как можно более подробную информацию с именем идентификатора.

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

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

РЕДАКТИРОВАТЬ: Как альтернативный ORM, я хорошо слышал о доктрине: http://www.doctrine -project.org / .Лично я не использовал его, но он, кажется, является стандартом для многих, работающих с PHP.

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

5 голосов
/ 27 октября 2013

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

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

...