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

Php 我应该在所有相关表中包含自动增量id吗?,php,mysql,laravel,Php,Mysql,Laravel,我在Laravel应用程序中有多个表,具有1对1关系,例如用户、用户设置、用户财务 以及一些1对多关系,如用户和用户历史记录 我的问题是: 1.我应该总是在第一次添加增量id吗? 例如,下表2中是否需要id 表1: id (primary,increments) , name, email, password 表2: id (primary,increments), user_id, something_extra ^ why does every guide include this? /

我在Laravel应用程序中有多个表,具有1对1关系,例如用户、用户设置、用户财务

以及一些1对多关系,如用户和用户历史记录

我的问题是:

1.我应该总是在第一次添加增量id吗? 例如,下表2中是否需要id

表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中的1对1和1对多表` 我搜索了,但没有找到任何不同类型关系的命名约定

目前我有:

主键id为的用户表是基础

1对1:具有外键用户id的用户设置

一对多:用户\u历史记录\u关键用户\u id

多对多:用户\u组外部\u密钥用户\u id


前两个表是否应命名为settings/setting、histories/history?对不起,我有点困惑。

大约两天前我问了一个类似的问题。这取决于你,但我会同意的。在我的例子中,如果我不自动递增相关表中的所有ID,数据将不会与正确的用户关联。然而,有一种说法认为在这种情况下不应该使用auto_increment列,但它们对其他事情很有用。根据一些人的说法,这些关系可能没有那么有意义,因此关系的意义将取决于您和数据表的具体情况。无论如何,在决定要做什么之前,您应该更多地研究自动递增相关表中所有ID的优点,以及可能的缺点。无论哪种方法都可以,但它们都有不同的优点和缺点——您需要对它们进行比较,哪些方法最适合您的具体情况

这是一个关于主键的备受争议的话题。不,你不应该。数据库中的每一列都应该有一个用途。接下来,举个例子,我同意auto_increment id是冗余的,这仅仅是因为它没有用途。第二个表仍然唯一地描述用户,因此主键应该是用户id

除了上面提到的,还有一个原则让我决定是否需要auto_increment id:是否可以将表视为一个实体。例如,用户显然是一个实体,但关系在大多数情况下不是,即复合键可以用于此目的。但是当一个关系表被扩展为具有更多属性时,它就开始有了一个自动增量id

我在Laravel方面没有太多经验,但是数据库表的命名不应该由框架决定。比较历史和用户历史,一个新的DBA或开发人员在不查看其数据的情况下对这两个名称有什么期望?用户历史记录更准确地描述了表格


如果你有一个雄辩的模型,你应该在模型的表中有一个主键。如果从Laravel的角度来看,您的桌子没有模型,那么您可以做您想做的事情,但主要是做它能做的事情。您有用于用户设置的模型吗?如果是,你应该有一个主要的,如果不是,谁在乎呢。@dparoli谢谢,我搜索了很多,但没有找到我应该如何命名1对1表,我应该只是将用户设置命名为设置还是可能命名为用户设置或用户设置?对不起,我对Laravel上所有不同的命名约定感到有些不知所措。如果模型是用户设置,表应该是蛇形的复数:用户设置,透视表应该是蛇形的单数,按字母顺序排列模型顺序:角色用户。您可以在这里阅读:注意,我提到的是主键,而不是作为子集的增量id。您也可以检查这个问题:@dparoli我正在阅读链接,非常感谢谢谢,我决定不使用id,而是在设置表中同时使用用户id作为主键和外键,只需确定同一列是否可以同时在Laravel中