2

我想在我的服务器上创建一个 sqlDB,我对数据库开发非常陌生,几年前只在这里和那里做了一些奇怪的编码。我正在尝试构建一个具有四个相互引用的表的数据库..

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

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

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

//不确定下一个是否是个好主意,但希望有人可以让我知道他们对此 有何看法 userGroups 此表存储所有或组和用户连接。当用户加入一个组时,他们的 id 与组 id 一起存储。

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

这是我创建的我想在我的数据库上运行的代码。我不确定我是否正确地制作了外键,对此的任何建议也将不胜感激。

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 个表的数据库...
4

2 回答 2

2

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

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

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

于 2012-07-16T03:52:31.400 回答
1
  • 在创建任何具有外键的表之前,应创建该表。
  • Country(SID) - 没有表 Country 和字段 SID
  • 国家表应该有一个 id 字段作为主键。
  • 要使用外键,您应该指定引擎 =INNODB
  • 检查是否已使用外键创建表

    mysql> Show tables // Shows all created table
    mysql> desc tableName  // to see the structure of the created table    
    
于 2012-07-16T04:47:41.293 回答