我应该在所有相关表中包含自动增量 id 吗?

我在 Laravel 应用程序中有多个表,具有 1 对 1 的关系,例如users, users_settings,user_financial


还有一些一对多的关系,比如 users_histories


我的问题是:


1. 我应该总是首先包含增量id吗?

例如id,下面的表#2 中是否有必要?


表格1:


id (primary,increments) , name, email, password

表 2:


id (primary,increments), user_id, something_extra

 ^ why does every guide include this? // e.g. https://appdividend.com/2017/10/12/laravel-one-to-one-eloquent-relationships/

我不能只使用 user_id 作为主键并跳过增量键吗?因为我想在表 1 中插入数据后立即将其自动插入表 2。


2. tablesLaravel 中的1-to-1 和 1-to-many 应该如何命名?`

我搜索但没有找到任何不同类型关系的命名约定......


目前我这样做:


users带有主键的表id是基础。


一对一: users_settings外键user_id


一对多: users_histories foreign_keyuser_id


多对多: users_groups foreign_keyuser_id


前两个表应该命名为settings/ setting,histories/history吗?对不起,我在这里有点困惑。


qq_遁去的一_1
浏览 171回答 2
2回答

慕的地8271018

我实际上在两天前问了一个类似的问题。这取决于你,但我会说是的。在我的情况下,如果我不自动增加相关表中的所有 ID,数据将不会与正确的用户相关联。然而,有一种说法认为在这种情况下不应使用 auto_increment 列,但它们对其他事情很有用。根据某些人的说法,这些关系可能没有那么有意义,因此关系的意义取决于您和数据表的具体情况。无论如何,在决定要做什么之前,您应该更多地研究 auto_incrementing 相关表中所有 ids 的优点,以及可能的缺点。无论哪种方式都很好,但它们提供了不同的优点和缺点-您

尚方宝剑之说

这是一个关于主键的争论不休的话题。恕我直言,不,你不应该。数据库中的每一列都应该有一个用途。在此之后,对于您的示例,我同意 auto_increment id 是多余的,这仅仅是因为它没有目的。第二个表仍然唯一地描述用户,因此主键应该是 user_id。除了上述之外,还有一个原则让我决定是否需要auto_increment id:是否可以将表视为实体。例如,用户显然是一个实体,但关系不是(在大多数情况下),即组合键可以达到目的。但是,当关系表扩展为具有更多属性并且它具有 auto_increment id 开始变得有意义时。我对 Laravel 没有太多经验,但数据库表的命名不应该由框架决定。比较 history 和 user_history,新 DBA 或开发人员在不查看其数据的情况下对这两个名称有何期望?user_history 更准确地描述了该表
打开App,查看更多内容
随时随地看视频慕课网APP