我正在使用我公司的现成应用程序,供应商已经实现了一个有趣的数据库功能(众多功能之一)。我之前没有看到它在生产中使用过,我希望能够获得更多信息。
每个数据库表都指特定的实体类型。例如,TBL_Person
,TBL_Organisation
,TBL_Address
。但是,对于每个表,ID始终以相同的数字组开始,例如,所有TBL_Address
条记录均以1401
开头,所有TBL_Person
条记录均以1500
开头。然后在此之后附加唯一部分。
从发展的角度来看,我所能看到的优点如下:
WId
,RId
,LId
或UnhelpfullyNamed_Id
等列,我立即知道它所指的是什么(感谢他们的一个小程序还提供了您键入前四位数的位置,它会告诉您实体是什么以及在哪个表中找到它)TBL_Vehicle
记录可能是汽车(1234),卡车(2345),摩托车(3456),因此您不需要使用继承等,除非真的有必要缺点(一般意义上说如果在其他地方使用过)可能是:
此设计模式/功能是否有术语?有没有其他众所周知的数据库实现这一点?还有其他不利之处吗?
答案 0 :(得分:1)
在这样的例子中,首先经常有 NO 数据库设计。 一切都是在应用程序级别(可能是OO)上设计和实现的,然后在某个地方存储(持久化) - 在这种情况下是在数据库中。数据库只是一个“应用程序下的存储”。
在应用数据库设计的情况下,使用以数据为中心的模型。一旦完成,数据库可以“独立” - 不需要应用程序从数据中理解。
可能有也可能没有涉及ORM映射器,因此当涉及到那些大型表时,您可能会查找映射器实现的单表继承的结果。
答案 1 :(得分:1)
通过将两条信息合并到单个字段中,这种“设计”违反了atomicity的原则,因此违反了第一个普通形式。
逻辑上,通过使用复合主键{type, id}
可以实现同样的目的。我猜测“合并”类型和id的决定是由他们的应用程序设计和希望拥有“简单”密钥驱动的。