2013-04-24 3 views
1

처음으로 많은 학대를 음탕 한 후 나는이 질문을 물었다. 진정되었다. 나는 다시 시도하고 있으며 더 구체적으로하려고 노력하고있다.SQL Oracle CREATE - 알 수없는 문제

나는 유니을위한 과제를 수행하고이 질문 중 하나에 대해 다음과 같은 메시지였다

Write Create Table SQL statements for the relational schema that you have created 
Place the text in the specified location in the file: ASS1_SQL.TXT 
• All tables must have primary keys. 
• All tables must have appropriate foreign key constraints. 
• Each foreign key column must have identical column name, datatype and size of the primary key 
that it refers to 
• Add any NOT NULL constraints as dictated by the ERD 
• The following columns data types and sizes must be used 
suppid, stkid     number(2) 
suppname, stkname    varchar2(30) 
sellprice, purchaseprice  number(6,2) 

이에 대한 내 대답했다 : 당신은 내가 가리키는 오전 말을하기 전에

CREATE Table SUPPLIER(
suppid Number(2) NOT NULL, 
suppname varchar2(30), 
stkid Number(2) NOT NULL, 
citycode Number(2) NOT NULL, 
Primary Key (suppid), 
Foreign Key (citycode) references CITY 
) 

CREATE Table STOCKITEM( 
stkid Number(2) NOT NULL, 
stkname varchar2(30) , 
sellprice Number(6,2) , 
purchaseprice Number(6,2) , 
suppid Number(2) , 
Primary Key (stkid) , 
whid Number(2) NOT NULL, 
suppid Number(2) Foreign Key references SUPPLIER , 
whid Number(4) Foreign Key references WAREHOUSE 
) 

내가 작성하지 않은 테이블 (및 내 질문에 표시)에 대해서는 이미 사용하고있는 데이터베이스에 WAREHOUSECITY 테이블이 생성되어 있다는 점에 유의하십시오.

이 코드는 테이블을 만들고 작동시킵니다. 그러나 10 점 만점에 0 점을 받았다. 위의 코드는 처음부터 약간 향상되었지만 NOT NULL 속성을 수정했습니다.

Do my NOT NULL and FOREIGN KEY Constraints seem to have the right syntax?

ERD를

은 아래로 나를 먼저 문의하고 나는 그것을 조정할 수 있습니다하십시오이 질문에 투표하기 전에 https://www.dropbox.com/sh/eohlj5h073kwp4u/Ot08kbdY7Q

에서 PDF에서 찾을 수 있습니다. 그래서이 잘못 나에게 기회를주십시오

+1

이 태그가 MySQL과 Oracle 모두에 태그가 지정되는 이유는 무엇입니까? 어떤 데이터베이스를 사용하고 있습니까? –

+0

'Number()'타입은 오라클을 의미합니다 ... MySQL 태그를 제거하십시오 ... –

+0

죄송합니다, 나는 SQL을 의미했습니다. 그게 더 좋은가요? –

답변

1

외래 키 구문은 입니다.입니다.

이 시도 :

CONSTRAINT fk1 FOREIGN KEY (suppid) 
    REFERENCES STOCKITEM(suppid) 
위를 닮은 당신의 구문을 변경

.

또한 기본 키는 변수 앞에 선언해야합니다.

마지막으로, 오라클의 기본 키 구문은 다음과 같습니다

CONSTRAINT pk PRIMARY KEY (suppid)); 

전체 코드 :

CREATE Table SUPPLIER(
suppid Number(2) NOT NULL, 
suppname varchar2(30), 
stkid Number(2) NOT NULL, 
citycode Number(2) NOT NULL, 
CONSTRAINT pk1 PRIMARY KEY (suppid), 
CONSTRAINT fk1 FOREIGN KEY (citycode) References ParentTable(primary_key_column) 
) 

CREATE Table STOCKITEM( 
stkid Number(2) NOT NULL, 
stkname varchar2(30) , 
sellprice Number(6,2) , 
purchaseprice Number(6,2) , 
suppid Number(2) , 
whid Number(2) NOT NULL, 
CONSTRAINT pk2 PRIMARY KEY (stkid), 
CONSTRAINT fk2 FOREIGN KEY (suppid) References SUPPLIER(primary_key_column), 
CONSTRAINT fk3 FOREIGN KEY (whid) References WAREHOUSE (primary_key_column) 
) 

참고 :

당신은 물론, 변경해야합니다 * primary_key_column * 위의 예에서 열 이름에 *.

+0

그들 모두가 fk1이나 fk1, fk2 ... 등이 될 것입니까? –

+0

@DannyMahoney는 최신 업데이트를 볼 수 있습니다. 즉, 고유 한 이름을 지정해야합니다 : –

+0

@DannyMahoney Read : http : // www.techonthenet.com/oracle/primary_keys.php AND : http://www.techonthenet.com/oracle/foreign_keys/foreign_keys.php –

0

을 줄이 웹 사이트에 새로운 오전 : 그것은 그 테이블에서 필드를 참조하지 않는

Foreign Key (citycode) references CITY 

때문이다.

또한, 이러한 잘못된 순서로 나타납니다

Primary Key (stkid) , 
whid Number(2) NOT NULL, 

난 항상 선언 내 모든 필드 내 키 전에.