在我的数据库中我有三个表(我有更多但是情况相同,用户可以是公司或单人)。
Users
有一个主键id_user
; Company
有一个主键id_company
和一个外键users_id_user
; job_offers
有一个主键id_job_offers
和两个外键:company_id_company
和company_users_id_user
。我的问题是:
job_offers
中的主键是否有意义?我认为没有理由这样做。job_offers
有两个外键,一个与company
相关,另一个与users
相关。这有问题吗?是否存在另一种完成相同任务的方法?
答案 0 :(得分:2)
所有表都应该有一个主键。听起来你问的是你的主键应该是代理键还是自然键。
您可能也会问其他表格的相同问题。例如,假设用户表中的电子邮件列是必需且唯一的,则可以将其用作(自然)主键。
这个问题备受争议,两种方法都可以起作用(也可以采用混合方法)。如果你想一般性地阅读这个主题,请谷歌搜索“自然与代理键”。
答案 1 :(得分:1)
id
字段。这两个外键应该一起组成表的主键。答案 2 :(得分:1)
1)理解主键 工作邀请?我认为没有理由
是的 - 每个表都应该有一个主键。它被称为“正常化”。
您的选择可能不是很好。我要说两个外键一起应该是主键,而不是id列。
2)工作机会有两个外国人 钥匙,一个与公司和其他相关的钥匙 对用户,有什么问题吗?存在另一个 这种方式(最佳方式)?
不,这就是多少对多的关系。
答案 3 :(得分:1)
主键是否有意义 工作邀请?我不认为那里 这是一个原因。
是的。我同意每张桌子都应该有自己的PK。 Should each and every table have a primary key?
我有更多,但案件相同, 用户可以是公司还是单身 人
job_offers有两个外键,一个 与公司及其他相关 用户。这有问题吗? 是否存在另一种方式 完成同样的任务?
系统有两种类型的用户: 普通用户(人)和公司用户。 job_offers是一个保存的表 公司的工作机会。如果一个 公司用户想要发布一份工作,a 记录将插入到 job_offers表。然后一次 普通用户得到这份工作 job_offers.company_user_id_user会 被分配给这个普通用户 用户ID。
但是从您的ER图中,Company.users_id_user
是PK,它不能为空,并且此PK在job_offers.company_users_id_user
中用作FK。所以job_offers.company_users_id_user
也不能为空。
因此,它无法处理公司用户刚刚发布作业,普通用户获得此工作机会或最终没有人获得此工作机会的情况。在这种情况下,job_offers.company_users_id_user
应设置为null,违反job_offers.company_users_id_user
的非空约束。
我将使用此设计完成相同的任务:
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)