Database 在开发数据库时,是否需要在数据库的每个表中定义主键或forign键?
在开发数据库时,我们需要在数据库的每个表中定义主键或forign键,如果任何表不包含任何唯一字段,那么此时我们如何将该表与其他表连接起来。 假设我有三张桌子 表1人员详细信息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
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中遇到了复杂和困难。必须按顺序执行这些步骤
关系数据库要求每个表中的行(而不是标识列)是唯一的。这是强制性的。如果