数据库建表时不声明外键约束可以吗?

zhangyu6050 2005-07-28 04:20:05
有一个很困惑的问题,烦请您解答一下 :-)

数据库建表时不声明外键约束可以吗?
比如:
在一个论坛的数据库中,表FroumMessage的userID字段
该字段是User中userID的外键,所以建FroumMessage表时,
按理说应该给出约束:
FOREIGN KEY (`userID`) REFERENCES `bisuser` ( `userID`),
但是,类似这样的外键约束,在很多开源项目给出的SQL文件中都没有声明
难道外键约束可以不声明吗?
附:jive的建表sql文件


CREATE TABLE yazdFilter (
filterObject BLOB,
forumID INT NOT NULL,
filterIndex INT NOT NULL,
KEY (forumID),
KEY (filterIndex)
);

CREATE TABLE yazdForum (
forumID INT NOT NULL,
name VARCHAR(255),
description TEXT,
modifiedDate VARCHAR(15),
creationDate VARCHAR(15),
moderated INT NOT NULL,
PRIMARY KEY (forumID)
);

CREATE TABLE yazdForumProp (
forumID INT NOT NULL,
name VARCHAR(30) NOT NULL,
propValue VARCHAR(255) NOT NULL,
KEY (forumID,name)
);

CREATE TABLE yazdGroup (
groupID INT NOT NULL,
name VARCHAR(50) NOT NULL,
description VARCHAR(255),
PRIMARY KEY (groupID)
);

CREATE TABLE yazdGroupPerm (
forumID INT NOT NULL,
groupID INT NOT NULL,
permission INT NOT NULL,
KEY (forumID),
KEY (groupID)
);

CREATE TABLE yazdGroupUser (
groupID INT NOT NULL,
userID INT NOT NULL,
administrator INT NOT NULL,
PRIMARY KEY (groupID,userID)
);

CREATE TABLE yazdMessage (
messageID INT NOT NULL,
threadID INT NOT NULL DEFAULT -1,
subject VARCHAR(255),
userID INT NOT NULL,
body TEXT,
modifiedDate VARCHAR(15) NOT NULL,
creationDate VARCHAR(15) NOT NULL,
approved INT NOT NULL,
PRIMARY KEY (messageID),
KEY (userID),
KEY (threadID),
KEY (approved),
KEY (creationDate),
KEY (modifiedDate)
);

CREATE TABLE yazdMessageTree (
parentID INT NOT NULL,
childID INT NOT NULL,
KEY (parentID),
KEY (childID)
);

CREATE TABLE yazdMessageProp (
messageID INT NOT NULL,
name VARCHAR(30) NOT NULL,
propValue VARCHAR(255) NOT NULL,
PRIMARY KEY (messageID,name)
);

CREATE TABLE yazdThread (
threadID INT NOT NULL,
forumID INT NOT NULL,
rootMessageID INT NOT NULL,
approved INT NOT NULL,
creationDate VARCHAR(15) NOT NULL,
modifiedDate VARCHAR(15) NOT NULL,
PRIMARY KEY (threadID),
KEY (forumID),
KEY (rootMessageID),
KEY (creationDate),
KEY (modifiedDate)
);

CREATE TABLE yazdUser (
userID INT NOT NULL,
name VARCHAR(50),
username VARCHAR(30) NOT NULL,
passwordHash VARCHAR(32) NOT NULL,
email VARCHAR(30) NOT NULL,
emailVisible INT NOT NULL,
nameVisible INT NOT NULL,
PRIMARY KEY (userID)
);

CREATE TABLE yazdUserPerm (
forumID INT NOT NULL,
userID INT NOT NULL,
permission INT NOT NULL,
KEY (forumID),
KEY (userID)
);

CREATE TABLE yazdUserProp (
userID INT NOT NULL,
name VARCHAR(30) NOT NULL,
propValue VARCHAR(255) NOT NULL,
KEY (userID,name)
);


...全文
272 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧