我想在我的服务器上创建一个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);
所以有三个问题:
答案 0 :(得分:2)
如果您的用户可以在多个组中,并且许多用户可以在一个组中,则将列和外键引用删除到组表中的userid字段。 usergroups表处理这种多对多映射。
如果说每个群组还有一个“所有者”用户,那么您当前的设置才有意义......
另外,您使用的是什么数据库引擎? Innodb或myisam ...如果myisam外键像任何其他索引一样开玩笑而没有任何强制约束的能力,因此尝试和声明并不是真的有用。
答案 1 :(得分:1)
检查是否已使用Forign键创建表
mysql> Show tables // Shows all created table
mysql> desc tableName // to see the structure of the created table