在开发数据库时,然后使用compolsury在数据库的每个表中定义主键或forign键,如果任何表不包含任何唯一字段,那么我们如何将表连接到其他表。 假设我有三个tabe。
table1 Personel Detail
Emai_Address (PK)
Name
City
ContactNo
Land_Line_No
D_O_B
Gender
Marital_Status
Language_Known
Table2 Professiona_Detail
Total_Experiance
Annual_Salary
Functional_Area
Current_Industry
Key_Skill
Resume_HeadLine
表3 WorkPreference
Specify Your Preference
Start Working
Prefered Location
Job Type
Obove Table1包含PK,但Table2或表3不包含任何Pk或FK,那么如何连接这三个表。
答案 0 :(得分:2)
没有。这不是强制性的。但 HIGHLY 推荐!
一些SQL大师曾经说过:
如果它没有主键,则不是表格!
以该声明为生!
外键会使您的数据库更安全,并避免“僵尸”行。再说一遍:从一切手段来说,它不是强制性的或技术上必要的,但如果从一开始就不知道它,你就会陷入麻烦之中!相信我......在那里,清理那个烂摊子......
答案 1 :(得分:2)
Table2
和Table3
应该有FK
到Table1
。否则,您将不知道这些表中的记录适用于哪个人。每个表还应该为其定义PK
。这样您就可以在执行UPDATES
或DELETES
时唯一标识一行。
答案 2 :(得分:1)
除了作为开发人员之外,没有什么能够强制执行主/外键。
它们不是强制,但是最佳做法,应该创建。
答案 3 :(得分:1)
当开发对数据库进行建模时,如果任何不包含任何唯一字段的表,我们如何连接数据库的每个表中的compolsury定义主键或forign键与其他表格的表格。
(1)是的。
您在第6步遇到并发症和困难,因为您尚未完成第5步。必须按顺序执行这些步骤。
关系数据库要求每个表中的行(不是标识列)是唯一的。这是强制性的。如果这些行不是唯一的,那么它不是一个关系表,它是另一个东西,一桶鱼。
之后FKs等会很容易。在那之前,FKs等是不可能的。
(2)您已经为Person
提供了一个非常好的,稳定的唯一标识符。 Professional
和WorkPreference
表缺少一两列。他们不会独自坐着。 Professional
和WorkPreference
适用于哪些人或哪些人?
他们属于Person
。到目前为止,您唯一的Person
标识符为EmailAddress
。因此EmailAddress
需要添加到Professional
和WorkPreference
。
EmailAddress
是Professional
和WorkPreference
中的PK。
EmailAddress
也是Professional
和WorkPreference
到Person
中的FK。 (到目前为止,基数是1:1。)
(3)现在你可能还需要Person.Name
上的唯一约束,但是你必须处理两个“Bob Smith”和“Bob Smith”vs“Smith,Bob”vs“Robert Smith”。所以还有一些工作要做。如果它是一个简单的数据库,那么Person.Name
可能就足够了。
就是这样,任务在逻辑层完成。
(4)现在在物理层面(用户看不到的元素),您可能会认为在子表中携带CHAR(30)EmailAddress
因性能原因而不合理,所以您可以添加一个狭窄的代理键Person
,例如PersonId INT
。 代理键始终是附加列和索引;它不是自然键的替代品;您仍然需要EmailAddress UNIQUE
作为维护行唯一性的自然键。
然后,您可以在PersonId
中使用Person
作为PK。
然后,您将PersonId
作为FK和PK迁移到Professional
和WorkPreference
; 而不是 EmailAddress
。
但是你不能放弃Person.EmailAddress UNIQUE
,因为这是在Person
中维护唯一行的基础。