Sql 查找表实现-一个表或单独的表
我将在一个系统中实现几个查找表。通常,所有查找表都具有相同的结构,如 id、名称、值、等级、活动 在这个项目中,我们使用AngularJS作为前端,Web API/实体框架作为后端 我有一些选择 选项1-创建一组具有相同结构的查找表 e、 g.LK地区、LK状态、LK时期、LK州、LK部门等。 此选项为传统设计。数据模式是结构化的,易于理解。很容易实现/强制执行外键完整性。但是您必须创建单独的web方法来处理CRUD操作。如果将来要添加另一个查找表,则必须重复相同的操作 选项2-通过添加一个名为LookupType的额外列来标识查找组,从而创建一个大的查找表 此选项可减少表的数量。使查找表易于维护和检索(例如,一个模式、一个web方法可以处理所有常规查找CRUD操作)。但是由于LookupType的原因,外键完整性有点松散Sql 查找表实现-一个表或单独的表,sql,database,asp.net-web-api,Sql,Database,Asp.net Web Api,我将在一个系统中实现几个查找表。通常,所有查找表都具有相同的结构,如 id、名称、值、等级、活动 在这个项目中,我们使用AngularJS作为前端,Web API/实体框架作为后端 我有一些选择 选项1-创建一组具有相同结构的查找表 e、 g.LK地区、LK状态、LK时期、LK州、LK部门等。 此选项为传统设计。数据模式是结构化的,易于理解。很容易实现/强制执行外键完整性。但是您必须创建单独的web方法来处理CRUD操作。如果将来要添加另一个查找表,则必须重复相同的操作 选项2-通过添加一个名为
请分享您的偏好,并告诉我原因。我希望获得有关此实施的最佳实践。谢谢大家! 不惜一切代价避免选项2,选择选项1而不去想它。(*) 引用完整性太重要了,不能为了任何其他问题而妥协 如果你去那里,你只会发现痛苦 如果要减少重复,请使用web api实现语言(java?)实现服务列表,并使用要使用的查找表的名称对每个服务进行参数化 编辑
(*)代表我说“连想都不想”是错误的。当然,想想看。如果需要的话,继续,甚至在stackoverflow上发布一个关于它的问题。思考是好的,Gordon Linoff上面的回答很好地说明了这一点。我会为选项2辩护,尽管一般来说,你想要选项1。正如其他人所提到的,选项1是更简单的方法,并且很容易允许外键关系 在某些情况下,有一个单一的参考表是很方便的。例如,如果您正在编写一个支持多种人类语言的系统,那么拥有一个包含事物名称的引用表要比遍布整个数据库的大量引用表简单得多。或者,我想,您可能有非常神秘的安全需求,需要复杂的加密算法——处理单个表更容易 然而,参考表上的参考完整性很重要。有些数据库具有非基于触发器的机制,支持一个表的引用完整性(Oracle和SQL Server中的外键和计算列)。这些机制有点麻烦,但它们允许对单个表进行不同的外键引用。而且,您总是可以使用触发器强制引用完整性,尽管我不推荐这种方法 正如数据库所做的大多数事情一样,没有一个正确的答案。在大多数情况下,普遍接受的答案是正确的(选项1)。第二种选择仅在有限的情况下可取,具体取决于系统要求。我建议: A.如果这是一个企业系统,请遵循组织标准(我知道,有些人可能会对此大笑)。如果存在这样的东西,它肯定会提升单个表 B.如果必须仅使用枚举或1聚合查找表进行编程级查找(如错误消息等)。任何与业务相关的数据的查找数据(我认为)应位于单独的表中,至少出于以下原因:
,,,…在选项2)中没有任何优势,在我看来,丢失正确的外键是一个阻碍表演的因素。“减少表格数量”毫无意义。它不会使您的数据库更快、更小或更易于维护(实际上维护起来会更困难:如果您需要为一种查找类型添加一个新属性,然后为另一种查找类型添加另一个属性,该怎么办?)。如果我的查找表仅用于服务drop,则选项2称为反模式“一个真正的查找表”