-1

当我想链接两个现有表时,我的问题就出现了。

我对这个领域很陌生,只处理数据库几天。

如果有人可以帮助我并告诉我我做错了什么,那就太好了。

我在 Docker 中使用“microsoft / mssql-server-linux: latest”,并在编辑器中使用“Azure Data Studio”。

CREATE TABLE Bestellung
(
BestlNr INTEGER NOT NULL,
Datum INTEGER,
Gesamtpreis INTEGER,
PRIMARY KEY (BestlNr)
) ;


CREATE TABLE Kunde
(
KdNr INTEGER NOT NULL,
Vorname VARCHAR,
Nachnahme VARCHAR,
Geburtsdatum INTEGER,
Strasse VARCHAR,
Hausnummer VARCHAR,
Ort VARCHAR,
PLZ INTEGER,
Passwort VARCHAR(50),
PRIMARY KEY (KdNr),
) ;


ALTER TABLE Bestellung
   ADD CONSTRAINT Bestellung, FOREIGN KEY (KdNr),
   REFERENCES Kunde (KdNr),
      ON DELETE CASCADE
      ON UPDATE CASCADE;
4

2 回答 2

0

首先,将列声明为 avarchar(1)有点毫无意义,如果您只需要一个字符,则使用 a char(1)

接下来,您的ALTER TABLE语句有一堆不应该出现的逗号,其中一个CREATE语句有一个额外的逗号,因此我们将删除它们。

接下来,要创建一个,FOREIGN KEY您需要该列存在于两个表中;Bestellung没有列KdNr,因此它为什么会失败。

最后,您尝试使用CONSTRAINT与您的表相同的名称;你不能那样做。数据库中的对象名称必须是唯一的。

更改这些位后,最终结果如下:

CREATE TABLE dbo.Bestellung (BestlNr int NOT NULL,
                             Datum int,
                             Gesamtpreis int,
                             KdNr int
                                 PRIMARY KEY (BestlNr));


CREATE TABLE dbo.Kunde (KdNr int NOT NULL,
                        Vorname char(1),
                        Nachnahme char(1),
                        Geburtsdatum int,
                        Strasse char(1),
                        Hausnummer char(1),
                        Ort char(1),
                        PLZ int,
                        Passwort varchar(50),
                            PRIMARY KEY (KdNr));
GO

ALTER TABLE Bestellung
ADD CONSTRAINT Kunde_KdNr_FK
    FOREIGN KEY (KdNr)
    REFERENCES Kunde (KdNr) ON DELETE CASCADE ON UPDATE CASCADE;
于 2020-09-29T15:29:03.917 回答
0

首先,您需要在 Bestellung 表中为您的外键添加一列

所以:

CREATE TABLE Bestellung
(
BestlNr INTEGER NOT NULL,
Datum INTEGER,
Gesamtpreis INTEGER,
FK_KdNr INTEGER,
PRIMARY KEY (BestlNr)
) ;

然后建立关系

ALTER TABLE Bestellung
   ADD CONSTRAINT Bestellung FOREIGN KEY (FK_KdNr)
   REFERENCES Kunde (KdNr)
      ON DELETE CASCADE
      ON UPDATE CASCADE;
于 2020-09-29T15:19:34.963 回答