如何用外键创建sql表

时间:2012-07-16 03:46:51

标签: mysql database

我想在我的服务器上创建一个sqlDB,我是数据库开发的新手,并且几年前在这里完成了奇怪的编码。我正在尝试构建一个包含四个相互引用的表的数据库。

这是创建每个表格的内容,以便您更好地了解我想要实现的目标。

此表将存储用户为其他用户创建的集线器。

用户 存储创建组和加入组时使用的用户详细信息

//不确定下一个是不是一个好主意,但希望有人可以告诉我他们对此有什么看法 的群组 此表存储所有或组和用户连接。当用户加入组时,他们的ID将与组ID一起存储。

国家 国家/地区用于帮助限制可以返回的结果数量

下面是我创建的代码,我希望在我的数据库上运行..我不确定我是否正确使用了外键,对此的任何建议也将受到赞赏。

CREATE DATABASE tempDB
USE tempDB

CREATE TABLE Group (groupID UInt32 PRIMARY KEY, userID UInt32 references User(SID), country VARCHAR(20) references Country(SID));

CREATE TABLE User (userID UInt32 PRIMARY KEY, name VARCHAR(20), country VARCHAR(20) references Country(SID));

CREATE TABLE userGroups (userID references User(SID), groupID UInt32 references Group(SID));

CREATE TABLE countries (countryName VARCHAR(20) PRIMARY KEY);

所以有三个问题:

  1. 表UserGroups值得吗?
  2. 我是否正确创建了外键?
  3. 此代码是否会创建一个包含4个表格的数据库......

2 个答案:

答案 0 :(得分:2)

如果您的用户可以在多个组中,并且许多用户可以在一个组中,则将列和外键引用删除到组表中的userid字段。 usergroups表处理这种多对多映射。

如果说每个群组还有一个“所有者”用户,那么您当前的设置才有意义......

另外,您使用的是什么数据库引擎? Innodb或myisam ...如果myisam外键像任何其他索引一样开玩笑而没有任何强制约束的能力,因此尝试和声明并不是真的有用。

答案 1 :(得分:1)

  • 在创建任何具有外键的表之前,应该创建表。
  • 国家/地区(SID) - 没有表格国家和字段SID
  • 国家/地区表应将id字段作为主键。
  • 要使用外键,您应指定engine = INNODB
  • 检查是否已使用Forign键创建表

    mysql> Show tables // Shows all created table
    mysql> desc tableName  // to see the structure of the created table