0

在我的数据库中,我有三个表(我有更多,但情况相同,用户可以是公司或单身人士)。

  • Users有一个主键id_user
  • Company有一个主键id_company和一个外键users_id_user
  • job_offers有一个主键id_job_offers和两个外键:company_id_companycompany_users_id_user.

我的问题是:

  1. 主键在 中有意义job_offers吗?我不认为这是有原因的。
  2. job_offers有两个外键,一个与 相关,company另一个与users. 这有问题吗?是否存在另一种方法来完成相同的任务?

能效比

4

4 回答 4

2

所有表都应该有一个主键。听起来您在问您的主键应该是代理键还是自然键

您可能也会对其他表格提出相同的问题。例如,假设您的users表中的email列是必需的并且是唯一的,它可以用作(自然)主键。

这个问题引起了激烈的争论,两种方法都可以工作(混合方法也可以)。如果您想大致了解这个主题,请在谷歌搜索“自然与代理键”。

于 2011-05-06T02:33:13.523 回答
1

1)job_offers 中的主键有意义吗?我认为没有理由

是的,每个表都应该有一个主键。这称为“标准化”。

你的选择可能不是很好。我想说两个外键一起应该是主键,而不是 id 列。

2)job offer 有两个外键,一个与公司相关,一个与用户相关,有问题吗?是否存在另一种方法(最好的方法)来做到这一点?

不,这就是多对多的关系。

于 2011-05-06T01:25:58.553 回答
1
  1. 我觉得你是对的。那里不需要单独的id字段。这两个外键应该一起构成表的主键。
  2. 在我看来很好。
于 2011-05-06T01:23:32.497 回答
1

job_offers 中的主键有意义吗?我不认为这是有原因的。

是的 。我同意每张桌子都应该有自己的PK。 每个表都应该有一个主键吗?

我有更多,但情况相同,用户可以是公司或单身人士

job_offers 有两个外键,一个与公司相关,另一个与用户相关。这有问题吗?是否存在另一种方法来完成相同的任务?

系统有两种用户:普通用户(个人)和公司用户。job_offers 是一个保存公司工作机会的表。如果公司用户想要发布工作,则会在 job_offers 表中插入一条记录。那么一旦普通用户得到这个工作offer,job_offers.company_user_id_user 就会被分配给这个普通用户的userid。

但是从您的 ER 图中,Company.users_id_user是 PK ,不能为 null ,并且此 PK 用作job_offers.company_users_id_userFK。所以job_offers.company_users_id_user也不能为 null 。

因此,它无法处理公司用户刚刚发布工作,而普通用户在获得此工作机会之前或最终没有人获得此工作机会的情况。这种情况下, job_offers.company_users_id_user应该设置为null,这违反了job_offers.company_users_id_user'not空约束。

我将使用此设计完成相同的任务:

Users
=================
id_user (PK)
email 
activation
password

Company
=================
id_company (PK)
activities 
foundation 
user_id (FK to Users)
description

job_offer
=================
id_job_offer (PK)
id_company (FK to Company)
description_offer 
tags

user_offer
=================
id (PK)
user_id (FK to Users)
job_offer_id (FK to job_offer)
于 2011-05-06T02:35:51.247 回答