【问题标题】:Should I include auto-incremental id in all related tables?我应该在所有相关表中包含自动增量 ID 吗?
【发布时间】:2019-08-23 00:30:16
【问题描述】:

我在 Laravel 应用程序中有多个表,它们具有一对一的关系,例如 usersusers_settingsuser_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。我应该如何在 Laravel 中命名一对一和一对多 tables? `

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

目前我这样做:

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

一对一: users_settings 外键 user_id

一对多: users_historiesforeign_key user_id

多对多: users_groupsforeign_key user_id

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

【问题讨论】:

  • 恕我直言,如果你有一个 Eloquent 模型,你应该在模型表中有一个主键。如果您的表没有从 Laravel 的角度来看的模型,您可以做您想做的事,但主要是它的工作原理。你有 user_settings 的模型吗?如果是,你应该有一个主要的,如果不是,谁在乎。
  • @dparoli 谢谢,我搜索了很多,但没有找到我应该如何命名 1-to-1 表,我应该将 users_settings 命名为 settings 还是 user_setting 或 @987654348 @?抱歉,我对 Laravel 上所有不同的命名约定有点不知所措。
  • 如果模型是UserSetting,则表格应为蛇形复数形式:user_settings,数据透视表应按模型字母顺序为蛇形形式的单数形式:role_user。你可以在这里阅读:webdevetc.com/blog/laravel-naming-conventions
  • 请注意,我说的是 primary key 而不是 incremental id 的子集。你也可以查看这个问题:stackoverflow.com/questions/41655535/…
  • @dparoli 我正在阅读链接,非常感谢

标签: php mysql laravel


【解决方案1】:

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

【讨论】:

  • 谢谢,我决定不使用id 并使用user_id 作为settings 表中的primary_key 和foreign_key,只需要弄清楚同一列是否可以都在 Laravel 中
【解决方案2】:
  1. 这是关于主键的一个备受争议的话题。恕我直言,不,你不应该。数据库中的每一列都应该有一个目的。在此之后,对于您的示例,我同意 auto_increment id 是多余的,这仅仅是因为它没有目的。第二个表仍然是唯一描述用户的,所以主键应该是 user_id。

    除此之外,我还有一个原则来决定我是否需要auto_increment id:我是否可以将表视为一个实体。例如,用户显然是一个实体,但关系不是(在大多数情况下),即复合键可以达到目的。但是,当关系表被扩展为具有更多属性时,它开始具有 auto_increment id 的意义。

  2. 我对 Laravel 没有太多经验,但是数据库表的命名不应该由框架来决定。比较 history 和 user_history,新的 DBA 或开发人员在不查看数据的情况下对这两个名称有何期望? user_history 更准确地描述了表格

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    • 2011-01-31
    • 2020-02-29
    • 1970-01-01
    • 2018-07-01
    相关资源
    最近更新 更多