RedBean是否需要“id”主键?

时间:2012-03-04 12:17:22

标签: php database orm redbean

如果您使用RedBean ORM,是否需要向数据库中的每个表添加名为“id”的主键?

在我的数据库中,我有一些表具有2或3个字段的主键对,或者其他名称不是“id”的主键(是的,我可以将名称更改为“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 个答案:

答案 0 :(得分:10)

不幸的是,对于当前的表结构,您无法使用RedBean。每个表都需要有一个自动增量主键。略有下降,因为它使现有产品的整合更加困难。

由于这种限制而未能使用RedBean的几个线程,以及作者Gabor De 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

希望将来能够解除这种限制,因为它确实妨碍了与现有产品的整合。

编辑:作为替代ORM,我听说过Doctrine:http://www.doctrine-project.org/。我没有亲自使用它,但它似乎是许多使用PHP的标准。

编辑2:感谢Jason提请注意一种将RedBean集成到现有项目中的新方法,在该项目中可能没有为其设置数据库。我想更新我的答案,以防人们仍然提到这个问题。 Gabor建议制作映射到表的视图,您可以在其中设置视图以获得RedBean所需的正确结构。我没有亲自测试过这个,但它得到了一些用户的积极反馈。它在更改表时增加了一些额外的开销和维护,但似乎是迄今为止这个问题的最佳和最完整的答案。 http://www.redbeanphp.com/faq#beanformatter

答案 1 :(得分:5)

接受的答案并非严格正确......您可以使用现有的表结构 - 但是您需要在每个表的顶部实现一个VIEW,允许您将PKEY列重命名为“id”。 ..看看Gabor的这封电子邮件 - RedBeanPHP的创建者:

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