Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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_Sqlplus - Fatal编程技术网

Sql 创建表

Sql 创建表,sql,oracle,sqlplus,Sql,Oracle,Sqlplus,假设您有以下数据库: Person(ssn NUMERIC(9), name VARCHAR(40), gender CHAR(1)), ssn is primary key Organization(org_code CHAR(4), budget INTEGER, org_name VARCHAR(60)), org_code is primary key Person_Organization(ssn, org_code), both columns are the primary k

假设您有以下数据库:

Person(ssn NUMERIC(9), name VARCHAR(40), gender CHAR(1)), ssn is primary key

Organization(org_code CHAR(4), budget INTEGER, org_name VARCHAR(60)), org_code is primary key

Person_Organization(ssn, org_code), both columns are the primary key.
person_organization表中的键是外键还是主键?我被困在如何创建这个表上。我试过在我的课本上查找,但找不到相关信息。我不知道它们是否应该是引用主键的外键,或者我是否应该这样做

CREATE TABLE person_organization(ssn NUMERIC(9), org_code VARCHAR(60));
如有任何建议,将不胜感激


谢谢。

我建议为PERSON\u ORGANIZATION(称为类似po\u id的东西)添加一个唯一的、自动递增的主键,以及ssn和Organg\u代码的两个外键。如果你想的话,你也可以让这两个独一无二。根据我的经验,我希望几乎每个表都有自己的唯一/自动键(除非是查找表或审计表(可能还有其他表))

我建议为PERSON\u-ORGANIZATION(称为po\u id)添加一个唯一的、自动递增的主键,以及ssn和org\u代码的两个外键。如果你想的话,你也可以让这两个独一无二。根据我的经验,我希望几乎每个表都有自己的唯一/自动键(除非是查找表或审计表(可能还有其他表))

简单的答案是他们都是

ssn,组织代码
应该是
人员组织
的主键

ssn
应该是一个外键返回到个人中,
org\u code
应该是一个外键返回到组织中

把我自己和代理键分开,我并不同意代理键的论点,在这种情况下,它似乎不需要,因为它不会在其他任何地方使用

不幸的是,这种(好的)多对多关系解决方案的问题在于,它通常需要在一个表上有两个唯一的键,
ssn,org\u code>
org\u code,ssn
,并选择一个作为主键


当您使用Oracle时,create table语法将是

create table person_organization
( ssn number(9)
, org_code varchar2(60)
, constraint person_organization_pk primary key (ssn, org_code)
, constraint person_organization_ssn_fk foreign key ( ssn )
    references person ( ssn )
, constraint person_organization_oc_fk foreign key ( org_code )
    references organization ( org_code )
 );
在原始的表创建脚本中,您使用了
ssn
作为
numeric(9)
,它应该是
number(9)
。您可能需要考虑不限制此数据类型的大小。您还有
org\u code
作为
varchar
,这可能是
varchar2


是学习语法的一个很好的资源。

简单的答案是两者都是

ssn,组织代码
应该是
人员组织
的主键

ssn
应该是一个外键返回到个人中,
org\u code
应该是一个外键返回到组织中

把我自己和代理键分开,我并不同意代理键的论点,在这种情况下,它似乎不需要,因为它不会在其他任何地方使用

不幸的是,这种(好的)多对多关系解决方案的问题在于,它通常需要在一个表上有两个唯一的键,
ssn,org\u code>
org\u code,ssn
,并选择一个作为主键


当您使用Oracle时,create table语法将是

create table person_organization
( ssn number(9)
, org_code varchar2(60)
, constraint person_organization_pk primary key (ssn, org_code)
, constraint person_organization_ssn_fk foreign key ( ssn )
    references person ( ssn )
, constraint person_organization_oc_fk foreign key ( org_code )
    references organization ( org_code )
 );
在原始的表创建脚本中,您使用了
ssn
作为
numeric(9)
,它应该是
number(9)
。您可能需要考虑不限制此数据类型的大小。您还有
org\u code
作为
varchar
,这可能是
varchar2

是学习语法的好资源。

它们都是

对于person_organization表,您将有一个由两列组成的复合主键。每个表分别是另一个表的外键

对于正常的数据库设计,它们应该引用其他表中的主键,这些约束强制数据库中数据的有效性

他们都是

对于person_organization表,您将有一个由两列组成的复合主键。每个表分别是另一个表的外键

对于正常的数据库设计,它们应该引用其他表中的主键,这些约束强制数据库中数据的有效性

它们是外键

您列出了“两列都是主键”,但我认为它们不是

该表没有主键。 这两个字段的组合当然是作为主键的代理,做一些事情,比如确保条目被唯一标识,从而共同作为唯一标识符,但这有点不同

我还建议添加一个单独的主键字段,以与其他表的结构保持一致。与其他表一样,我建议始终使用id[我最喜欢的]或tablename\u id

它们是外键

您列出了“两列都是主键”,但我认为它们不是

该表没有主键。 这两个字段的组合当然是作为主键的代理,做一些事情,比如确保条目被唯一标识,从而共同作为唯一标识符,但这有点不同


我还建议添加一个单独的主键字段,以与其他表的结构保持一致。与其他表一样,我建议始终使用id[my favorite]或tablename_id

这是基本思想,您需要为每个字段提供适当的数据类型

CREATE TABLE Persons (
  ssn int(9) NOT NULL PRIMARY KEY,
  name varchar(40),
  gender CHAR(1)
)

CREATE TABLE Organization (
  org_code CHAR(4)NOT NULL PRIMARY KEY,
  budget INTEGER,
  org_name VARCHAR(60)
)

CREATE TABLE Person_Organization (
  ssn int FOREIGN KEY REFERENCES Persons(ssn),
  org_code CHAR FOREIGN KEY REFERENCES Organization(org_code)

)这是基本思想,您需要为每个字段提供适当的数据类型

CREATE TABLE Persons (
  ssn int(9) NOT NULL PRIMARY KEY,
  name varchar(40),
  gender CHAR(1)
)

CREATE TABLE Organization (
  org_code CHAR(4)NOT NULL PRIMARY KEY,
  budget INTEGER,
  org_name VARCHAR(60)
)

CREATE TABLE Person_Organization (
  ssn int FOREIGN KEY REFERENCES Persons(ssn),
  org_code CHAR FOREIGN KEY REFERENCES Organization(org_code)

)

这就是我喜欢用自己的主键创建这些intersect表的部分原因。然后,您可以只保留另外两个外键作为多列唯一标识符。但两种方式都可以+1,可能是最常见的设计。@northpole,如果你不同意,那么绝对没有必要+1:-)。不,我一点也不反对,我只是做得有点不同。你的建议