Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 在开发数据库时,是否需要在数据库的每个表中定义主键或forign键?_Database_Relational Database - Fatal编程技术网

Database 在开发数据库时,是否需要在数据库的每个表中定义主键或forign键?

Database 在开发数据库时,是否需要在数据库的每个表中定义主键或forign键?,database,relational-database,Database,Relational Database,在开发数据库时,我们需要在数据库的每个表中定义主键或forign键,如果任何表不包含任何唯一字段,那么此时我们如何将该表与其他表连接起来。 假设我有三张桌子 表1人员详细信息 Emai_Address (PK) Name City ContactNo Land_Line_No D_O_B Gender Marital_Status Language_Known 表2专业详情 Total_Experiance Annual_Salary Functional_Area Current_Indus

在开发数据库时,我们需要在数据库的每个表中定义主键或forign键,如果任何表不包含任何唯一字段,那么此时我们如何将该表与其他表连接起来。 假设我有三张桌子

表1人员详细信息

Emai_Address (PK)
Name
City
ContactNo
Land_Line_No
D_O_B
Gender
Marital_Status
Language_Known
表2专业详情

Total_Experiance
Annual_Salary
Functional_Area
Current_Industry
Key_Skill
Resume_HeadLine
表3工作偏好

Specify Your Preference
Start Working
Prefered Location
Job Type

Obove表1包含PK,但表2或表3不包含任何PK或FK,那么如何连接这三个表。

否。这不是强制性的。但是强烈推荐

一些SQL专家曾经说过:

如果没有主键,它就不是表

按照这句话生活


外键将使数据库更加安全,并避免“僵尸”行。再说一次:这不是强制性的,也不是技术上必须的,但是如果你从一开始就不知道,你会给自己带来麻烦的!相信我。。。。去了那里,清理了那堆乱七八糟的东西……

不,这不是强制性的。但是强烈推荐

一些SQL专家曾经说过:

如果没有主键,它就不是表

按照这句话生活


外键将使数据库更加安全,并避免“僵尸”行。再说一次:这不是强制性的,也不是技术上必须的,但是如果你从一开始就不知道,你会给自己带来麻烦的!相信我。。。。在那里,清理了那堆乱七八糟的东西……

Table2
Table3
应该有一个
FK
Table1
。否则,您将不知道这些表中的记录是为谁准备的。每个表还应该为其定义一个
PK
。这样,您可以在执行
更新
删除
时唯一地标识一行

表2
表3
应该有一个
FK
表1
。否则,您将不知道这些表中的记录是为谁准备的。每个表还应该为其定义一个
PK
。这样,您就可以在执行
更新
删除

时唯一地标识一行。除了作为开发人员之外,没有任何东西可以强制执行主键/外键


它们不是强制性的,而是最佳实践,应该创建。

除了作为开发人员的您之外,没有任何东西可以强制使用主键/外键

它们不是强制性的,但是最佳实践,应该创建。

在开发数据库建模时,然后在数据库的每个表中定义主键或forign键,如果当时有任何表不包含任何唯一字段,我们如何将该表与其他表连接起来

(1) 对

由于尚未完成步骤5,您在步骤6中遇到了复杂和困难。必须按顺序执行这些步骤

关系数据库要求每个表中的行(而不是标识列)是唯一的。这是强制性的。如果行不是唯一的,那么它就不是一个关系表,而是其他的东西,一桶鱼

之后,FKs等将变得简单。在此之前,FKs等将是不可能的

(2) 您已经为
人员
提供了一个非常好、稳定的唯一标识符。
Professional
WorkPreference
表缺少一两列。他们不会独自坐在外面。
Professional
WorkPreference
适用于谁或什么

他们属于一个
。到目前为止,您仅有的
个人
标识符是
电子邮件地址
。因此,
EmailAddress
需要添加到
Professional
WorkPreference

EmailAddress
Professional
WorkPreference
中的主键

EmailAddress
也是
Professional
WorkPreference
Person
的FK。(到目前为止,基数是1::1。)

(3) 现在,您可能还需要对
Person.Name
进行一个唯一的约束,但接下来您必须处理两个“Bob Smith”和“Bob Smith”对“Smith,Bob”对“Robert Smith”。因此,仍然有一些工作要做。如果它是一个简单的数据库,它可能不重要
Person。Name
可能就足够了

也就是说,任务在逻辑级别完成

(4) 现在在物理层(用户看不到的元素),出于性能原因,您可能会决定在子表中携带CHAR(30)
EmailAddress
是不明智的,因此您可以
Person
添加一个狭窄的代理键,例如
PersonId INT
代理键始终是附加列和索引;它不是自然键的替代品;您仍然需要
EmailAddress UNIQUE
作为保持行唯一性的自然键

然后您可以使用
PersonId
作为
Person
中的主键

然后将
PersonId
作为FK和PK迁移到
Professional
WorkPreference
;而不是
电子邮件地址

但是你不能放弃Person.EmailAddress UNIQUE,因为这是在开发数据库建模时在
Person

中维护唯一行的基础,所以我们需要在数据库的每个表中定义主键或forign键,如果当时有任何表不包含任何唯一字段,我们如何将该表与其他表连接起来

(1) 对

由于尚未完成步骤5,您在步骤6中遇到了复杂和困难。必须按顺序执行这些步骤

关系数据库要求每个表中的行(而不是标识列)是唯一的。这是强制性的。如果