2014-03-30 25 views
0

我在创建表时遇到SQL问题。 例如:主键SQL中的两个属性(此密钥的引用外键)

/* lekovi */ 
create table lekovi 
(
    kid number(5), 
    Isifra number(10), 
    lime varchar2(50), 
    sostav varchar2(500), 

    primary key (kid, Isifra), 
    foreign key (kid) references kompanii (kid) 
) 

/* recepti */ 
create table recepti 
( 
    kid number(5), 
    Isifra number(10), 
    dembg number(13), 
    pembg number(13), 
    datum varchar2(50), 
    doza varchar2(500), 

    primary key (kid, Isifra, dembg, pembg), <--- 
    foreign key (kid, Isifra) references lekovi (kid, Isifra), <--- 
    foreign key (dembg) references doktori (dembg), 
    foreign key (pembg) references pacienti (pembg) 
) 

我有两个表lekovirecepti

在表lekovi我有主键(kid, Isifra)。当我参考recepti(标记代码为< ---)我有问题,因为我显示了两个单独的键而不是复合键。 SQL是用ORACLE编写的。

如何用键解决这个问题?

+0

不清楚真的是什么问题?你想得到什么? –

+0

如何将复合外键从“recepti”引用到“lekovi”? – user2906850

回答

0

如何将复合外键从“recepti”引用到“lekovi”?

与你一样。外键应该具有与引用键相同的列内容(列数和位置/数据类型)。

SQL> create table lekovi (
    2 kid number(5), 
    3 Isifra number(10), 
    4 lime varchar2(50), 
    5 sostav varchar2(500), 
    6 primary key (kid, Isifra) 
    7 ) 
    8/

Table created. 

SQL> create table recepti (
    2 kid number(5), 
    3 Isifra number(10), 
    4 dembg number(13), 
    5 pembg number(13), 
    6 datum varchar2(50), 
    7 doza varchar2(500), 
    8 primary key (kid, Isifra, dembg, pembg), 
    9 foreign key (kid, Isifra) 
10 references lekovi (kid, Isifra) 
11 ) 
12/

Table created. 
+0

但是,当我插入数据到表“recepti”我看到这种形式http://prntscr.com/35kg21 但我已经把一个参考lekovi的ID不是两个文本字段。 – user2906850

+0

对不起,我看不到你参考的网页形式与你的问题有关。您在lekovi表中创建了复合主键。所有引用此主键的外键必须具有与它们引用的PK相同的结构 - 这是设计中的RDBMS规则。如果需要分别创建引用Key和Isifra列的外键,则必须引用其他具有相应结构的表中的其他PK。但是,您应该根据您的业务需求作出此决定。 –