【发布时间】:2010-11-14 19:31:09
【问题描述】:
已完成改进
- nvarchar(5000) -> nvarchar(4000) 但 PostgreSQL 中没有 nvarchar => TEXT
- 某些变量的内存限制
- 语法略有改变,更易读
- 破折号到下划线
- Magnus' improvements
我关注my plan for my first database project。
我想知道查询和关系表中的任何弱点。
DDL 中的 SQL 查询
CREATE TABLE answers
(
question_id INTEGER FOREIGN KEY REFERENCES questions(user_id)
PRIMARY KEY
CHECK (user_id>0),
answer TEXT NOT NULL -- answer must have text
);
CREATE TABLE questions
(
user_id INTEGER FOREIGN KEY
REFERENCES user_info(user_id)
PRIMARY KEY
CHECK (user_id>0),
question_id INTEGER FOREIGN KEY REFERENCES tags(question_id)
NOT NULL
CHECK (user_id>0)
SERIAL,
body TEXT NOT NULL, -- question must have body
title VARCHAR(60) NOT NULL, -- no empty title
moderator_removal BOOLEAN NOT NULL, -- by default false
sent_time TIMESTAMP NOT NULL
);
CREATE TABLE tags
(
question_id INTEGER FOREIGN KEY REFERENCES questions(question_id)
CHECK (user_id>0),
tag VARCHAR(20) NOT NULL,
CONSTRAINT no_duplicate_tag UNIQUE (question_id,tag)
)
CREATE TABLE user_infos
(
user_id INTEGER FOREIGN KEY REFERENCES questions(user_id)
PRIMARY KEY
CHECK (user_id>0)
SERIAL
UNIQUE,
username VARCHAR(25),
email VARCHAR(320) NOT NULL -- maximun possible
UNIQUE,
password_sha512 INTEGER NOT NULL,
is_moderator BOOLEAN NOT NULL,
is_Login BOOLEAN NOT NULL,
has_been_sent_a_moderator_message BOOLEAN NOT NULL
);
-- to have default values
ALTER TABLE questions ALTER COLUMN moderator_removal SET DEFAULT FALSE
ALTER TABLE user_info ALTER COLUMN is_moderator SET DEFAULT FALSE
ALTER TABLE user_info ALTER COLUMN is_login SET DEFAULT FALSE
ALTER TABLE user_info ALTER COLUMN has_been_sent_a_moderator_message SET DEFAULT FALSE
-- to have default values
ALTER TABLE questions ALTER COLUMN moderator_removal SET DEFAULT FALSE
ALTER TABLE user_info ALTER COLUMN is_moderator SET DEFAULT FALSE
ALTER TABLE user_info ALTER COLUMN is_login SET DEFAULT FALSE
ALTER TABLE user_info ALTER COLUMN has_been_sent_a_moderator_message SET DEFAULT FALSE
关系表
alt text http://files.getdropbox.com/u/175564/db/db777.png
您会在 DDL 查询中改进哪些方面?
【问题讨论】:
-
您没有发布任何查询...只有 DDL。
-
@Pukku:我认为 DDL 是 SQL 的子集。
-
(OT) 作为第一步,删除或替换标识符中的破折号(例如带有下划线)。或引用它们。
-
@Milen:我做到了。我还将一些 varchars 更改为 nvarchars。
-
Postgres 中没有“nvarchar”类型。
标签: sql database postgresql ddl