微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

何时创建子类型或仅使用可选属性

如何解决何时创建子类型或仅使用可选属性

一段时间以来,我一直在使用学校作业与 Oracle sql Developer 一起练习,但在为其中之一绘制实体关系图时遇到了某种困境,这是我的问题:

在作业中,他们提到有一个具有某些属性的 CLIENT 实体,如果该 CLIENT 已婚,他们将询问合作伙伴姓名,如果未婚,他们将询问此人的出生日期。你会如何处理这种情况?因为有人告诉我“没有正确答案”,但我想必须有一种标准的或更流行的方法解决这些类型的情况,我想象了两个选项,我当然会展示。

This would be the base entity

选项 1: 所以,我想也许我可以将这两个属性添加到 CLIENT 实体,并使它们成为可选的并具有如下内容

enter image description here

我个人的问题是,当他们明确告诉我,如果 CLIENT 已婚,则分配合作伙伴名称,如果不是 date_of_birth,这听起来对其中一个或另一个来说是强制性的.尽管我刚才说了,我还是提到了这个选项,因为我不知道他们是否真的这样做了。

选项 2: 创建子类型,一种用于单身客户,另一种用于单身客户。

enter image description here

这确实解决了以前的问题,date_of_birth 和partners_name 现在是强制性的,但是这样做我会再创建两个表吗? (我没有探索过 Data Modeler 之外的子类型,所以我不确定这将如何转化为 sql Developer)。


当我完成这项任务时,我选择了选项 1,但直到今天我一直想知道选项 2 是否会更好,我确实这么认为,但我担心的是...这样做是否值得如果有两个额外的实体,例如 MARRIED 和 SINGLE? 考虑到它们只有一个属性,这可能意味着两个额外的表。还有其他我没有看到或不知道的选项吗?也许,我真的很想听听比我更了解这件事并且见过更多案例的人的意见。

注意:我也做了一些研究,比如尝试为第二个选项找到 PROS,this is what Oracle has to say about supertypes and subtypes at least. 也找到了 this one,我认为有点相似,但不完全是,所以我宁愿提出自己的问题。

感谢大家的时间。

解决方法

这个案例是否值得拥有两个额外的实体,例如 MARRIED 和 SINGLE?这可能意味着两个额外的表

他们不会有任何额外的桌子。例如,给定您的对象:

CREATE TYPE client IS OBJECT(
  id         INT,first_name VARCHAR2(200),last_name  VARCHAR2(200)
) NOT INSTANTIABLE NOT FINAL;

CREATE TYPE single UNDER client (
  date_of_birth DATE
) INSTANTIABLE FINAL;

CREATE TYPE married UNDER client (
  partner_name VARCHAR2(400)
) INSTANTIABLE FINAL;

那么你就只有一张桌子了:

CREATE TABLE clients OF client(
  id CONSTRAINT clients__id__pk PRIMARY KEY
);

哪个可以存储两个子类型:

INSERT INTO clients VALUES ( SINGLE( 1,'Alice','Adams',DATE '1900-01-01' ) );
INSERT INTO clients VALUES ( MARRIED( 2,'Betty','Baron','Bob' ) );

那么:

SELECT c.*,TREAT(VALUE(c) AS single).date_of_birth AS date_of_birth,TREAT(VALUE(c) AS married).partner_name AS partner_name
FROM   clients c

输出:

ID FIRST_NAME LAST_NAME DATE_OF_BIRTH PARTNER_NAME
1 爱丽丝 亚当斯 1900-01-01 00:00:00
2 贝蒂 男爵 鲍勃

dbfiddle here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。