2017-08-01 132 views
1

我使用BIT DEFAULT 0,作为布尔不知道它的权利是否如此。那么,问题是我不能创建任何表,因为在FK有问题,不明白为什么?我还添加了ERD图像以获得更好的视野。SQL DB创建错误

也许有人会/可以很好,并向我解释,ty!

也许有人知道任何好的程序或在线沙箱的turtnind ERD的MSSQL代码或MySQL代码?如果免费使用它将会很好。提前致谢!

enter image description here

enter image description here

CREATE DataBase LO; 
GO 
USE LO; 

CREATE TABLE Weapon 
(
    ClassWeapon CHAR(50) NULL, 
    Level INT NULL, 
    MinDmg INT NULL, 
    MaxDmg INT NULL, 
    AtkSpeed NUMERIC(3,2) NULL, 
    PerSecondDmg NUMERIC(6,2) NULL, 
    PlayerLevel INT NULL, 
    SkillLevel INT NULL, 
    Image BIT DEFAULT 0 NULL, 
    Name CHAR(100) NULL, 
    Weapons CHAR(50) NOT NULL, 
    Monsters CHAR(50) NULL, 
    PRIMARY KEY (Weapons), 
    FOREIGN KEY (Monsters) REFERENCES Monster(Monsters) 
); 

CREATE TABLE Armor 
(
    ClassArmor CHAR(50) NULL, 
    Name CHAR(100) NULL, 
    Level INT NULL, 
    Defense INT NULL, 
    Image BIT DEFAULT 0 NULL, 
    Armors CHAR(50) NOT NULL, 
    Monsters CHAR(50) NULL, 
    PRIMARY KEY (Armors), 
    FOREIGN KEY (Monsters) REFERENCES Monster(Monsters) 
); 

CREATE TABLE Menu 
(
    Weapons CHAR(50) NULL, 
    Armors CHAR(50) NULL, 
    Monsters CHAR(50) NULL, 
    FOREIGN KEY (Weapons) REFERENCES Weapon(Weapons), 
    FOREIGN KEY (Armors) REFERENCES Armor(Armors), 
    FOREIGN KEY (Monsters) REFERENCES Monster(Monsters) 
); 

CREATE TABLE Monster 
(
    Name CHAR(100) NULL, 
    Level INT NULL, 
    MinHealth INT NULL, 
    MaxHealth INT NULL, 
    MinDmg INT NULL, 
    MaxDmg INT NULL, 
    AtkSpeed NUMERIC(3,2) NULL, 
    Location CHAR(100) NULL, 
    Monsters CHAR(50) NOT NULL, 
    DropItems CHAR(100) NULL, 
    Image BIT DEFAULT 0 NULL, 
    PRIMARY KEY (Monsters), 
    FOREIGN KEY (DropItems) REFERENCES Items(DropItems) 
); 

CREATE TABLE Items 
(
    DropItems CHAR(100) NOT NULL, 
    Weapons CHAR(50) NULL, 
    Armors CHAR(50) NULL, 
    PRIMARY KEY (DropItems), 
    FOREIGN KEY (Weapons) REFERENCES Weapon(Weapons), 
    FOREIGN KEY (Armors) REFERENCES Armor(Armors) 
); 
+0

1)创建表2)使用'ALTER TABLE'语法创建FK。在SQL中没有前向声明。例如武器会引用Monster表(不存在)。 – lad2025

回答

2

好了,问题是,我不能创造任何表,因为在FK一个问题,不知道为什么?

简而言之,您不能引用不存在的对象。

,必须先创建表,然后添加FK关系:

CREATE DataBase LO; 
GO 
USE LO; 

CREATE TABLE Weapon 
(
    ClassWeapon CHAR(50) NULL, 
    Level INT NULL, 
    MinDmg INT NULL, 
    MaxDmg INT NULL, 
    AtkSpeed NUMERIC(3,2) NULL, 
    PerSecondDmg NUMERIC(6,2) NULL, 
    PlayerLevel INT NULL, 
    SkillLevel INT NULL, 
    Image BIT DEFAULT 0 NULL, 
    Name CHAR(100) NULL, 
    Weapons CHAR(50) NOT NULL, 
    Monsters CHAR(50) NULL, 
    PRIMARY KEY (Weapons), 
    --FOREIGN KEY (Monsters) REFERENCES Monster(Monsters) 
); 

CREATE TABLE Armor 
(
    ClassArmor CHAR(50) NULL, 
    Name CHAR(100) NULL, 
    Level INT NULL, 
    Defense INT NULL, 
    Image BIT DEFAULT 0 NULL, 
    Armors CHAR(50) NOT NULL, 
    Monsters CHAR(50) NULL, 
    PRIMARY KEY (Armors), 
---- FOREIGN KEY (Monsters) REFERENCES Monster(Monsters) 
); 

CREATE TABLE Menu 
(
    Weapons CHAR(50) NULL, 
    Armors CHAR(50) NULL, 
    Monsters CHAR(50) NULL, 
    --FOREIGN KEY (Weapons) REFERENCES Weapon(Weapons), 
-- FOREIGN KEY (Armors) REFERENCES Armor(Armors), 
-- FOREIGN KEY (Monsters) REFERENCES Monster(Monsters) 
); 

CREATE TABLE Monster 
(
    Name CHAR(100) NULL, 
    Level INT NULL, 
    MinHealth INT NULL, 
    MaxHealth INT NULL, 
    MinDmg INT NULL, 
    MaxDmg INT NULL, 
    AtkSpeed NUMERIC(3,2) NULL, 
    Location CHAR(100) NULL, 
    Monsters CHAR(50) NOT NULL, 
    DropItems CHAR(100) NULL, 
    Image BIT DEFAULT 0 NULL, 
    PRIMARY KEY (Monsters), 
    --FOREIGN KEY (DropItems) REFERENCES Items(DropItems) 
); 

CREATE TABLE Items 
(
    DropItems CHAR(100) NOT NULL, 
    Weapons CHAR(50) NULL, 
    Armors CHAR(50) NULL, 
    PRIMARY KEY (DropItems), 
    --FOREIGN KEY (Weapons) REFERENCES Weapon(Weapons), 
-- FOREIGN KEY (Armors) REFERENCES Armor(Armors) 
); 

ALTER TABLE Weapon 
ADD FOREIGN KEY (Monsters) REFERENCES Monster(Monsters); 

ALTER TABLE Armor 
ADD FOREIGN KEY (Monsters) REFERENCES Monster(Monsters); 

ALTER TABLE Menu 
ADD 
    FOREIGN KEY (Weapons) REFERENCES Weapon(Weapons), 
    FOREIGN KEY (Armors) REFERENCES Armor(Armors), 
    FOREIGN KEY (Monsters) REFERENCES Monster(Monsters); 

ALTER TABLE Monster 
ADD FOREIGN KEY (DropItems) REFERENCES Items(DropItems); 

ALTER TABLE Items 
ADD FOREIGN KEY (Weapons) REFERENCES Weapon(Weapons), 
FOREIGN KEY (Armors) REFERENCES Armor(Armors); 
+0

谢谢同样! – eXme

+0

或者更好的方法是更改​​正在创建的表的顺序,以便在指定外键时存在这些表。 –

+0

我觉得问题是在别的地方,我的ERD是一些错误,我猜...无论如何感谢.. – eXme

0

感谢@ lad2025

呢?这里是如何工作的通过添加表,然后更改FK。

CREATE DataBase LO; 
GO 
USE LO; 

CREATE TABLE Weapon 
(
    ClassWeapon CHAR(50) NULL, 
    Level INT NULL, 
    MinDmg INT NULL, 
    MaxDmg INT NULL, 
    AtkSpeed NUMERIC(3,2) NULL, 
    PerSecondDmg NUMERIC(6,2) NULL, 
    PlayerLevel INT NULL, 
    SkillLevel INT NULL, 
    Image BIT DEFAULT 0 NULL, 
    Name CHAR(100) NULL, 
    Weapons CHAR(50) NOT NULL, 
    Monsters CHAR(50) NULL, 
    PRIMARY KEY (Weapons) 
); 
ALTER TABLE Weapon ADD FOREIGN KEY (Monsters) REFERENCES Monster(Monsters); 

CREATE TABLE Armor 
(
    ClassArmor CHAR(50) NULL, 
    Name CHAR(100) NULL, 
    Level INT NULL, 
    Defense INT NULL, 
    Image BIT DEFAULT 0 NULL, 
    Armors CHAR(50) NOT NULL, 
    Monsters CHAR(50) NULL, 
    PRIMARY KEY (Armors) 
); 
ALTER TABLE Armor ADD FOREIGN KEY (Monsters) REFERENCES Monster(Monsters); 

CREATE TABLE Menu 
(
    Weapons CHAR(50) NULL, 
    Armors CHAR(50) NULL, 
    Monsters CHAR(50) NULL 
); 
ALTER TABLE Menu ADD FOREIGN KEY (Weapons) REFERENCES Weapon(Weapons); 
ALTER TABLE Menu ADD FOREIGN KEY (Armors) REFERENCES Armor(Armors); 
ALTER TABLE Menu ADD FOREIGN KEY (Monsters) REFERENCES Monster(Monsters); 

CREATE TABLE Monster 
(
    Name CHAR(100) NULL, 
    Level INT NULL, 
    MinHealth INT NULL, 
    MaxHealth INT NULL, 
    MinDmg INT NULL, 
    MaxDmg INT NULL, 
    AtkSpeed NUMERIC(3,2) NULL, 
    Location CHAR(100) NULL, 
    Monsters CHAR(50) NOT NULL, 
    DropItems CHAR(100) NULL, 
    Image BIT DEFAULT 0 NULL, 
    PRIMARY KEY (Monsters) 
); 
ALTER TABLE Monster ADD FOREIGN KEY (DropItems) REFERENCES Items(DropItems); 

CREATE TABLE Items 
(
    DropItems CHAR(100) NOT NULL, 
    Weapons CHAR(50) NULL, 
    Armors CHAR(50) NULL, 
    PRIMARY KEY (DropItems) 
); 
ALTER TABLE Items ADD FOREIGN KEY (Weapons) REFERENCES Weapon(Weapons); 
ALTER TABLE Items ADD FOREIGN KEY (Armors) REFERENCES Armor(Armors);