我在设计数据库时听到很多关于子表格的信息,我完全了解它们背后的理论。但是,我从未真正看到表格子类型在行动。如何创建表的子类型?我正在使用MS Access,我正在寻找一种在SQL和GUI(Access 2003)中实现它的方法。
干杯!
答案 0 :(得分:10)
一个简单的例子是让Person表具有主键和该表中的一些列。现在,您可以创建另一个名为Student的表,该表具有person表的外键(其超类型)。现在学生表中有一些超类型没有像GPA,Major等那样的列。但名称,姓氏等都在父表中。您始终可以通过Student表中的外键在Person表中访问学生姓名。
无论如何,请记住以下内容:
答案 1 :(得分:1)
表的子类型是EER图中的概念性事物。我还没有看到直接支持它的RDBMS(不包括对象关系DBMS)。它们通常用
实现答案 2 :(得分:1)
当使用ORM映射器生成完全模拟域的类子类型层次时,表子类型的概念很有用。
子类型表将同时具有返回其父级的外键,这也是子类型表的主键。
答案 3 :(得分:1)
请记住,在设计绑定应用程序时,与Access应用程序一样,子类型在连接方面会产生沉重的代价。
例如,如果您有一个包含三个子类型表的超类型表,并且您需要同时在一个表单中显示所有三个(并且您不仅需要显示超类型日期),您最终可以选择使用三个外连接和Nz(),或者你需要一个UNION ALL三个互斥的SELECT语句(每个子类型一个)。这些都不可编辑。
我打算从我使用超级/子类型表的第一个主要应用程序中粘贴一些SQL,但是看一下,SQL很复杂,只会让人感到困惑。这并不是因为我的应用程序很复杂,但这是因为问题的本质很复杂 - 向用户呈现完整的数据集,无论是超类型还是子类型,其本质都非常复杂。通过使用它得出的结论是,只有一个子类型表我会更好。
这并不是说它在某些情况下没用,只是Access的绑定表单不一定能够很容易地将这些数据呈现给用户。
答案 4 :(得分:1)
我有一个类似的问题,我一直在努力。
在寻找可重复的模式时,我想确保我没有放弃参照完整性,这意味着我不会使用(TABLE_NAME,PK_ID)解决方案。
我终于安定下来了:
基本类型表:CUSTOMER
子类型表:PERSON,BUSINESS,GOVT_ENTITY
我在CUSTOMER中放置了可空的PRERSON_ID,BUSINESS_ID和GOVT_ENTITY_ID字段,每个字段都有外键,以及只有一个不为空的检查约束。添加新的子类很容易,只需要添加可空的外键并修改检查约束。