2017-07-27 33 views
2

我在pgAdmin 4中創建了一些表格,但由於某種原因,我一直收到錯誤的標題,你能發現原因嗎?我沒有看到任何問題,並且我已經查看了與我的完全編譯的類似的其他代碼示例。它也在IDEone(http://ideone.com/ZBn2Nr)中運行正常。在PostgreSql中獲取「外鍵不同意的引用和引用列的數量」

謝謝!

Create table item 
    (iname varchar(30) primary key, 
    itype varchar(30)); 

Create table Cafe 
    (license numeric(5,0) primary key, 
    cname varchar(30), 
    address varchar(30)); 

Create table Client 
    (cid numeric(5,0) primary key, 
    name varchar(30), 
    phone numeric(9,0)); 

Create table Likes 
    (cid numeric(5,0), 
    iname varchar(30), 
    primary key(cid,iname), 
    foreign key(cid) references Client, 
    foreign key(iname) references item); 

Create table Sells 
    (license numeric(5,0), 
    iname varchar(30), 
    price float check(price > 0), 
    primary key(license,iname), 
    foreign key(license) references Cafe, 
    foreign key(iname) references item); 

Create table Receipt 
    (cid numeric(5,0), 
    rno numeric(5,0), 
    license numeric(5,0), 
    rdate date, 
    primary key(cid,rno), 
    foreign key(cid) references Client, 
    foreign key(license) references Cafe); 

Create table Buys 
    (cid numeric(5,0), 
    rno numeric(5,0), 
    iname varchar(30), 
    amount int check(amount > 0), 
    primary key(cid,rno,iname), 
    foreign key(cid) references Client, 
    foreign key(rno) references Receipt, 
    foreign key(iname) references item); 

回答

2

當您在引用子句中未指定列列表時,它將展開到被引用表的主鍵。

例如:

foreign key(rno) references Receipt 

擴展到

foreign key(rno) references Receipt(cid,rno) 

所以列數不​​匹配

+0

所以我要改變這條線 - 外鍵(RNO)引用收據(RNO)?我只是試圖做到這一點,但它給了我另一個錯誤,這次是:錯誤:語法錯誤處於或接近「foreign」 –

+0

您可能意外刪除了逗號。您還需要使Receipt.rno具有唯一性。 http://sqlfiddle.com/#!17/e1592 – Eelke