Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 何时创建子类型或仅使用可选属性_Sql_Oracle_Database Design_Object Oriented Database - Fatal编程技术网

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

Sql 何时创建子类型或仅使用可选属性,sql,oracle,database-design,object-oriented-database,Sql,Oracle,Database Design,Object Oriented Database,我已经与Oracle SQL Developer一起使用学校作业练习了一段时间,在为其中一个任务绘制实体关系图时遇到了一些难题,我的问题是: 在任务中,他们提到有一个具有特定属性的客户实体,如果该客户已婚,他们会询问合作伙伴的姓名,如果没有结婚,他们会询问此人的出生日期。你将如何处理这种情况?因为有人告诉我“没有正确的答案”,但我认为必须有一种标准的或更流行的方法来解决这类情况,我设想了两种选择,当然我会展示 选项1:因此,我想也许我可以将这两个属性都添加到客户机实体中,并使它们成为可选的,并

我已经与Oracle SQL Developer一起使用学校作业练习了一段时间,在为其中一个任务绘制实体关系图时遇到了一些难题,我的问题是:

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

选项1:因此,我想也许我可以将这两个属性都添加到客户机实体中,并使它们成为可选的,并具有如下内容:

我个人的问题是,当他们明确告诉我,如果客户结婚了,然后指定伴侣的名字,如果不是出生日期,这听起来对一方或另一方都是强制性的时,我会创造一个两者都可以为空的情况。不管我刚才说了什么,我还是提到了这个选项,因为我不知道他们是否真的这么做了

选项2:创建子类型,一个用于单一客户机,另一个用于非单一客户机

这确实解决了上一个问题,现在必须填写出生日期和伴侣姓名,但这样做会创建另外两个表吗?(我还没有研究Data Modeler之外的子类型,所以我不确定这将如何转化为SQL Developer)


当我完成这项任务时,我选择了选项1,但直到今天,我一直在想,选项2是否会更好,我确实这么认为,但我担心的是。。。在这种情况下,有两个额外的实体,如已婚和单身,值得吗?这可能意味着两个额外的表,考虑到它们只有一个属性。有没有其他我看不到或不知道的选择?也许,我真的很想听听那些对这件事了解得更多、看过比我多得多的案例的人的意见

注意:我也做了一些研究,比如为第二种选择寻找专业人士,也发现,我认为这有点相似,但不完全相同,所以我想提出我自己的问题

谢谢大家抽出时间

在这种情况下,有两个额外的实体,如已婚和单身,值得吗?这可能意味着多了两张桌子

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

创建类型客户端是对象(
id INT,
名字VARCHAR2(200),
姓氏VARCHAR2(200)
)不可实例化,不可终结;
在客户机下创建类型single(
出生日期
)可实例化的定语;
在客户端下创建类型(
合伙人姓名VARCHAR2(400)
)可实例化的定语;
那么您将只有一个表:

创建客户端的表客户端(
id约束客户端\u_id\u_主键
);
它可以存储两个子类型:

插入客户值(单个(1,'Alice','Adams',日期'1900-01-01');
插入客户价值观(已婚(2,‘贝蒂’、‘男爵’、‘鲍勃’);
然后:

选择c*,
将(值(c)视为单个)。出生日期视为出生日期,
视(价值(c)为已婚。伴侣的名字作为伴侣的名字
来自客户c
产出:

身份证件 名字 姓 出生日期 合伙人姓名 1. 爱丽丝 亚当斯 1900-01-01 00:00:00 2. 贝蒂 男爵 上下快速移动