子类型数据库表
在设计数据库时,我听到很多关于子类型表的信息,并且我完全了解它们背后的理论。但是,我从来没有真正看到过表格分类。你如何创建表的子类型?我正在使用MS Access,并且正在寻找一种在SQL中以及通过GUI(Access 2003)执行此操作的方法。子类型数据库表
干杯!
一个简单的例子是在表中有一个主键和一些列的Person表。现在您可以创建另一个名为Student的表,该表具有person表(它的超类型)的外键。现在学生表有一些超级类型没有的特性,例如GPA,Major等等。但名字,姓氏等等都在父表中。您始终可以通过Student表中的外键在Person表中访问学生名称。
不管怎么说,只要记住以下几点:
- 的层次描绘父类型和子类型之间的关系
- 超类型具有共同的属性
- 亚型具有唯一身份属性
表格的子类型是EER图表中的概念性事物。我还没有看到直接支持它的RDBMS(不包括对象关系DBMS)。它们通常在任一
- 一组为亚型的每个属性为空的列的实现在单个表中
- 随着基本类型属性和每个基本表至多一行一些其它表的表中将包含子类型属性
当使用ORM映射器生成准确建模域的类子类型层次结构时,表子类型的概念很有用。
一个子类型表将有一个外键返回到它的父母,这也是子类型表的主键。
如果子类型表记录与父表的关系为1:1,为什么他们不仅仅将FK用作PK? – 2011-02-26 01:02:04
请记住,在设计一个绑定的应用程序,与Access应用程序一样,子类型在连接方面会带来沉重的成本。例如,如果您有一个带有三个子类型表的超类型表,并且您需要一次显示所有三个表(并且您不仅需要显示超类型日期),您最终还是可以选择使用三个外部联接和Nz(),或者您需要三个互斥的SELECT语句(每个子类型一个)的UNION ALL。这些都不可编辑。
我打算从第一个主要应用程序中粘贴一些SQL,与超级/子类型表一起工作,但看着它,SQL非常复杂,只会让人们感到困惑。这并不是因为我的应用程序很复杂,而是因为问题的本质非常复杂 - 向用户展示整套数据(包括超类型和子类型)本质上是复杂的。与我合作的结论是,如果只有一个子类型表,我会变得更好。
这并不是说它在某些情况下没有用处,只是Access的绑定表单不一定很容易将这些数据呈现给用户。
我有一个类似的问题,我一直在努力。
在寻找可重复的模式时,我想确保我没有放弃引用完整性,这意味着我不会使用(TABLE_NAME,PK_ID)解决方案。
我最终选择:
灯头型号表:CUSTOMER
子类型表:人,企业,GOVT_ENTITY
我把客户可空PRERSON_ID,BUSINESS_ID和GOVT_ENTITY_ID领域,与国外键在每一个,和一个检查约束,只有一个不是null。添加新的子类型很简单,只需要添加可空的外键并修改检查约束即可。
对不起,但我想你只是描述一个REFERENCE。你所谓的超类型表缺少一个类型属性!对于更好的IMO示例,请参阅本主题中的CREATE TABLE Vehicles文章:http://bytes.com/groups/ms-sql/808389-design-question-type-heirarchy-supertype-queries – onedaywhen 2009-04-20 09:15:19