在数据库领域,我有博士学位,因此这一答案与方案者的观点相差不多。 关于奥利弗·汉普西,如果钥匙不是表面钥匙,那么关键人物可以而且有时会发生变化。 E.g. 天然钥匙或堆肥钥匙。 例如。 你们的SSN有可能在美国发生变化。 但是,多年来许多方案家将认为这是一个不可改变的关键,并以此来加以利用。 改变由外国钥匙组成的综合主要关键更为常见。
I m处理一个具有永久关系的数据库。 具体来说,三个实体(外国钥匙在各自的表格中加列主要钥匙)。 但是,在改变第三个实体时保持两个实体之间的关系要求<>。 改变部分交叉表格(也称为关于MSDN的纯合并表格)的主要关键。 这是一项有效的设计,只能通过取消永久关系交汇表来加以改进,并以两个双亲关系表取代(可能有自己的代用钥匙)。 欧洲法院将处理这一罚款。 这种设计变化将形成一种(Many->many)->many或Young1-Parent2-> Child-grandchild模型(如果下文不明确)。 实体框架将对此进行细致的工作,因为每个关系实际上都是一种与许多关系。 但是,从亚洲开发银行的角度来看,它设计了cra。 让我举一个例子,说明原因。
认为课程、课堂和校内相互连接。 班级可包括:课程设置、教室信息、校内学生 ID as foreign keys and contained a composit main key, including all three. 虽然有一个清晰、简明的永恒模式(三种方式的关系),但我们可以将其分为双亲关系。 这将提供两个交叉表格。 添加代用钥匙符合以下标准:
类别(SurrogateKeyClas,InstructorID,CourseID)
班次
这一设计的问题在于,我们可以有相同的课程,教员可以有多个时间,而以前的模式则避免了这种情况。 为了避免这一问题,你可以在数据库中增加两个国际发展法领域独一无二的制约因素,但是,如果你只是处理即将开始的关键,你为什么要这样做? 然而,这一解决办法将尽我所能。 然而,由于非自然的独特制约,这并不是逻辑数据库的设计。
BUT,如果你不想改变你的数据库或改变其数据库,这里是second Solutions: 部门间/联系表只是将两个实体或两个实体联系起来。 如果作一改动,就删除协会,并重开具有适当外国钥匙(导航特性)的新钥匙。 这意味着不允许你在任何关系中要求儿童实体,但这非常普遍。
我建议,实体框架(今后)允许那些能够设计一个名副其实的亚行模式的人在我们想要时改变交叉/联系表格中的关键部分!
另一项免费实例:
考虑学生课程,格拉德协会。 学生通过一年级学习课程。 通常,这在学生和在称为年级的协会表格中增设一个领域的课程中是许多到许多的联系人(协会表格有像职等这样的有效载荷数据,交叉表格没有有效载荷,在MSDN中被指为一个地方的单纯加入表格):
学生(StudentID) ......
课程(CourseID) ......
Taking(StudentID,CourseID,年级)
如果某人从退学中得出数据输入错误,将学生带入错误的班级,那么你就希望他们以后再选择退学,选择不同的课程。 在这种背景下,你需要从速计桌上删除欧阵标,并在不失去等级的情况下重新计算。 简单地修改“外国钥匙,似乎是一种更好的选择。 如果这似乎有争议,就与你自己的协会讨论,但作为教授,我是自然的。
结论: 如果你有一系列关系,则最好不要允许碎块和(或)改变FK,但如有需要,则存在可再生/可测情景,即使没有在上建议作为最佳做法。
这个问题可能表现在以下例外情形中,取决于您是否正在改变航行财产或模型中的关键财产:
侵犯人格尊严的行为发生: 在未变受保物体时,作为参考性完整性限制的一部分的主要关键财产不能改变,除非该物品被设定为协会的主要目标。 主要目标必须经过跟踪,没有标记去删除。
财产X是物体关键信息的一部分,不能修改。