Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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
Oracle SQL使用一些约束创建表_Sql_Oracle_Constraints_Create Table - Fatal编程技术网

Oracle SQL使用一些约束创建表

Oracle SQL使用一些约束创建表,sql,oracle,constraints,create-table,Sql,Oracle,Constraints,Create Table,第一次使用oracledb 我从一个非常基本的Person表开始: [“ID”、“年龄”、“工人阶级”、“fnlwgt”、“教育程度”、“教育数量”、“军事状态”、“职业”、“关系”、“种族”、“性别”、“资本收益”、“资本损失”、“每周小时数”、“国家”、“目标”] 和一个关系表:[“PersonID”、“RelativeID”、“relative”] 一个人的工人阶级只能是给定值中的一个: 私有、自emp not inc和少数其他值 一个人的年龄必须大于他的孩子 父母必须至少12岁 男人挣

第一次使用oracledb

我从一个非常基本的
Person
表开始:
[“ID”、“年龄”、“工人阶级”、“fnlwgt”、“教育程度”、“教育数量”、“军事状态”、“职业”、“关系”、“种族”、“性别”、“资本收益”、“资本损失”、“每周小时数”、“国家”、“目标”]

和一个
关系
表:
[“PersonID”、“RelativeID”、“relative”]

  • 一个人的工人阶级只能是给定值中的一个: 私有、自emp not inc和少数其他值
  • 一个人的年龄必须大于他的孩子
  • 父母必须至少12岁

  • 男人挣的钱不可能比妻子多
我的第一个想法是在客户端的代码级别检查这些东西,但我想有更好的方法用纯sql实现这一点


我想创建具有这些约束的表,但我对oracle SQL一无所知,无法满足您的条件。。我会尝试以下方法:

  • 一个人的工人阶级只能是给定值中的一个:Private、Self emp not inc和其他几个值
设置另一个名为“workclass_type”的表 使用以下数据:

ID工作类名称 一等兵 2自我管理计划 3. 以及你需要的任何其他价值观

将Person表上的“workclass”列更改为“workclass\u ID” 并在此列个人表上创建一个FK,指向workclass_类型中的ID列

这称为引用约束(或外键-相同的东西)。 它告诉Oracle将选择限制在另一个表中。 这有利于节省空间(除其他外),因为您不会在每一行上存储完整的字符串名称。。只是一个小的数字ID

您可以/应该通过序列填充ID列。。。但我会让你发现;)

  • 一个人的年龄必须大于他的孩子
不容易通过约束完成。。。你可以通过触发器来做,但是我不建议你。。触发 他们有自己的一套问题,往往会导致更大的问题。 我建议使用存储过程(正如Renato在评论中所建议的那样)

创建一个INS过程。。强迫每个人都通过这个程序进来。 换句话说,不要将表暴露给INS/UPD。。。但要公开程序

(当我说过程时,我指的是一个包中的过程..更简单..再次..我会让你发现这一点 现在您已经掌握了术语):)

  • 父母必须至少12岁
同样,这也是你上述程序的一部分


  • 男人挣的钱不可能比妻子多

同样,这也是你上述程序的一部分。

“一个男人挣的钱不能超过他的妻子”。我们在哪个世纪?@Gordon让我觉得这是一个家庭作业什么的……)ie奇怪的标准,以生成一个特定的逻辑案例来“实践”:)通过表约束,你无法实现你想要的。要么实现执行这些验证的过程,要么使用触发器。@同上。作为家庭作业,它实际上更令人尴尬。技术作业不应该传播这种刻板印象。如果您对Oracle一无所知,请开始阅读。你可以读一下,谢谢!这对我来说已经足够了