我是SQL Server 2008数据库开发的新手。
这里我有一个名为'Student'的主表和一个名为'Address'的子表。这些表之间的公共列是“学生ID”。
我的怀疑是:
我们是否需要在“地址”表中输入“地址ID”并将其设为主键?这是强制性的吗? (我不会在任何报告中使用此“地址ID”)
主键列是否必须在任何表中?
请你帮我解决这些问题。
请您参考SQL Server 2008数据库设计实践的最佳链接/教程(如果您知道的话),其中包括命名约定,最佳实践,SQL优化等等。
答案 0 :(得分:4)
1)是的,将ADDRESS_ID
列作为ADDRESS
表的主键是一个好主意。
但在STUDENT_ID
表中将ADDRESS
作为外键并不是一个好主意。这意味着地址记录只能与一个学生相关联。学生可以有室友,所以他们的地址相同。这就是为什么将ADDRESS_ID
列作为主键是一个好主意,因为它将指示唯一的地址记录。
我没有STUDENT_ID
表中的ADDRESS
列,而是在STUDENT
和ADDRESS
表之间有一个corrollary / xref / lookup表:
STUDENT_ADDRESSES_XREF
STUDENT_ID
,pk,fk to STUDENTS
table ADDRESS_ID
,pk,fk to ADDRESS
table EFFECTIVE_DATE
,date,not null EXPIRY_DATE
,date,not null 这使用复合主键,因此只有学生和学生的一个组合。地址存在。我添加了日期,以防有必要确切知道什么时候,因为有人可能会搬回家/等等。
最重要的是,这可以在ADDRESS_ID
列之外使用,以允许将单个地址与多个人相关联。
2)是的,坦白地说,定义主键是任何表格的必备条件。
在大多数数据库中,该法案还创建了一个索引 - 使搜索更有效率。这是通常的事情,比如确保记录是一个独特的条目......
答案 1 :(得分:0)
每个表都应该有一种唯一且明确地识别记录的方法。使AddressID成为地址表的主键。
如果没有主键,数据库将允许重复记录;可能会在未来发生连接问题或触发问题(如果实施)。