第一个数据库架构 - 产生错误

时间:2012-12-03 15:55:13

标签: mysql sql database postgresql

这是我的架构:

CREATE TABLE item (
    id integer NOT NULL PRIMARY KEY AUTO_INCREMENT,
    title varchar(60) NOT NULL,
    description varchar(900) NOT NULL,
    company_id integer NOT NULL REFERENCES company (id),
    date datetime NOT NULL,
    source_id integer NOT NULL REFERENCES source (id),
    link varchar(255) NOT NULL,
    location_id integer NOT NULL REFERENCES location (id)
);

CREATE TABLE location (
    id integer NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name varchar(255) NOT NULL,
    coordinate varchar(255) NOT NULL,
    location_id integer NOT NULL REFERENCES country (id)
);

CREATE TABLE country (
    id integer NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name varchar(255) NOT NULL
);

CREATE TABLE company (
    id integer NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name varchar(60) NOT NULL,
);

CREATE TABLE source (
    id integer NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name varchar(60) NOT NULL,
);

当我把它放入并单击构建架构时,它告诉我http://sqlfiddle.com上的第4行上存在无效语法。我可以看到没有错误,有人可以解决一些问题吗?

如果我做得不好或作出任何不好的决定,请告诉我。

4 个答案:

答案 0 :(得分:4)

你有2个错误的逗号。一个在“CREATE TABLE公司”的末尾,“CREATE TABLE source”。 并在位置之前创建国家。

CREATE TABLE company (
    id SERIAL PRIMARY KEY,
    name varchar(60) NOT NULL
);

CREATE TABLE country (
    id SERIAL PRIMARY KEY,
    name varchar(255) NOT NULL
);

CREATE TABLE location (
    id SERIAL PRIMARY KEY,
    name varchar(255) NOT NULL,
    coordinate varchar(255) NOT NULL,
    location_id integer NOT NULL REFERENCES country (id)
);

CREATE TABLE source (
    id SERIAL PRIMARY KEY,
    name varchar(60) NOT NULL
);

CREATE TABLE item (
    id SERIAL PRIMARY KEY,
    title varchar(60) NOT NULL,
    description varchar(900) NOT NULL,
    company_id integer NOT NULL REFERENCES company (id),
    date timestamp NOT NULL,
    source_id integer NOT NULL REFERENCES source (id),
    link varchar(255) NOT NULL,
    location_id integer NOT NULL REFERENCES location (id)
);

答案 1 :(得分:2)

您必须先创建表,然后才能在其他地方引用它们。按此顺序创建表: 资源, 公司, 国家, 地点, 项目

请注意,您可以按任何顺序执行前三个,但Country必须位于Location之前,Location,Source和Company必须位于Item之前。

在Source和Company的定义末尾还有两个额外的逗号。你必须删除它们。

答案 2 :(得分:1)

  1. 在引用country表之前创建location表。
  2. 删除,company定义中的悬空source

答案 3 :(得分:1)

首先,您需要创建表格country,然后location,然后是companysource和最后item