AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-236764

Thiago Guimarães's questions

Martin Hope
Thiago Guimarães
Asked: 2024-02-21 09:09:26 +0800 CST

我应该从用户表或客户表中存储什么外键?

  • 6

假设我有一个名为 的表users,其中包含电子邮件和密码等基本用户信息,并且我还有一个名为 的表clients。

客户端是一种用户类型,因此它将有一个字段来保存表中相应用户的 id users,类似于 的字段user_id。

现在假设有一些特定于客户端的表,然后需要存储客户端的 id,如下所示:

用户表:

ID 电子邮件
1 [电子邮件受保护]
2 [电子邮件受保护]

客户表:

ID 姓名 用户身份
1 用户1 1
2 用户2 2

课程表:

ID 姓名 客户ID
1 课程1 1
2 课程2 2

现在我真正不知道的是我应该在 Courses 表中保存什么 id 。

我应该保存client_id来自客户端表还是应该将用户表中的用户 ID 保存为客户端 ID。

我真的不知道,因为客户是一种用户类型,只有客户可以购买课程,而不是所有类型的用户,另一方面,没有用户就不存在客户,真正令人困惑的是,如果我使用用户 ID 而不是客户端 ID 那么该字段应该称为“user_id”?但这样的话它就会变得通用,因为只有客户才能上课程。

那么最好的方法是什么:

1 - 命名字段client_id并从客户表中添加客户的 id,然后获取与该客户相关的用户(我倾向于这个)。

2 - 命名字段client_id并存储用户表中的用户 ID,并获取关联的客户端(这有点令人困惑,但从层次结构上讲可能是有意义的,因为没有用户就没有客户端)。

3 - 命名字段user_id并存储用户表中的用户 ID(这种方法确实打破了我的观点,因为user_id可以是任何用户,但只有客户端类型的用户可以有课程)。

- - - - - - - - - - - - - - -更新 - - - - - - - - - - -----

所以我认为我的问题不清楚,所以我会澄清。

我想知道的是,是否有关于此主题的最佳实践,因为由于关系,我存储和检索数据的方式将直接影响我在应用程序中检索数据的方式。

现在,在真实的情况下,我有 3 个表: table users、 tableclients和 table courses。

该表clients仅包含不适合表的字段users,因为我将拥有更多类型的用户,这些用户也将在其他表中,就像administradors这也是一种用户类型。

现在,考虑到没有用户就不会存在客户,并且考虑到只有客户可以进行购买来购买课程,例如,我应该将哪个 id 存储在client_id表中courses,表中的 idclients或表中的 id users。

例如,只有客户可以购买产品,但客户(clients表)属于用户(users表)。在表中,假设purchased_products包含一个名为 的字段client_id,我应该从表中获取客户端的 idclients还是从表中获取用户的 id users?

两者对我来说都有意义,而且无论我真正想知道什么在这里更有意义,我都能够检索数据:

1 - 如果我将表中的 id 存储clients在 中courses.client_id,我会像这样检索用户:从$client->user层次结构上讲,这没有意义,因为用户位于客户端之前,而不是相反,但至少它是表的 idclient存储在courses.client_id.

2 - 如果我将表的 id 存储users在 中courses.client_id,我会以一种更有意义的方式检索数据,例如$user->client but I fell like the name of the field should not be course.client_id but rathercourse.user_id`,但这也会很糟糕,因为并非所有用户都可以购买课程,因此可能会产生误导。

在第一个示例中包含与该客户端的$client表clients和 $client->user users` 相关的所有信息。would access all information related to the table

在第二个示例中包含与该用户的$user表users和 $user->client客户端相关的所有信息。would access all information related to the table

同样,这更多的是一个语义问题,使事情更有条理。

foreign-key
  • 1 个回答
  • 51 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve