首先,对不起,如果这可能是一个愚蠢的问题.我对
MySQL的世界很新,所以……
无论如何,我的问题是这样的:我打算建立一个处理(现在)两种类型用户的数据库,比如管理员和用户.我的目标是让一个包含所有用户的表,恰当地命名为“users”.下面是我的MySQL命令的大致轮廓(我还没有测试过,所以可能出现错误):
CREATE TABLE users {
user_id int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
user_type int NOT NULL REFERENCES user_types(user_type_id),
ssn char(10) NOT NULL,
password varchar(40) NOT NULL,
first_name varchar(30) NOT NULL,
last_name varchar(30) NOT NULL,
address varchar(80) NOT NULL
} engine = InnoDB;
上面的“user_type”列将引用另一个名为“user_types”的表,该表列出了网站的不同用户类型(我这样做是为了以后可以选择添加更多用户类型):
CREATE TABLE user_types {
user_type_id int UNSIGNED NOT NULL PRIMARY KEY,
user_type_desc varchar(10) NOT NULL
} engine = InnoDB;
INSERT INTO user_types (user_type_id, user_type_desc) VALUES(1,'Admin'),(2,'User');
我的目标是将“用户”与“管理员”联系起来;一个“用户”(孩子)可以有一个“管理员”(父母),但一个“管理员”(父母)可以有几个“用户”关联(孩子).我的目标是创建一个简单的约会日历,为此我需要将用户与他们的管理员联系起来(在一个用户和一个管理员之间约会的意义上是一对一的关系).现在的问题是:
1)是否可以通过为所有用户提供一个表来实现这一目标?如果是这样,我该如何以良好的方式做到这一点?现在我正在考虑创建一个名为“赋值”的表:
CREATE TABLE assignments {
assign_id int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
patient_id int NOT NULL REFERENCES users(user_id),
doctor_id int NOT NULL REFERENCES users(user_id)
} engine = InnoDB;
但上面的代码对我来说很奇怪;我可以将那种外键链接到同一个表而没有任何危险吗?下面是“约会”表的SQL’代码’:
CREATE TABLE appointments {
appointment_id int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
assign_id int FOREIGN KEY REFERENCES assignments(assign_id),
date_time datetime NOT NULL,
description varchar(200) NOT NULL
};
也就是说,“约会”表中的每个条目都指向“管理员”和“用户”之间的某个分配.
2)如何以简单的方式实现“管理员”和“用户”之间的一对多关系,或者更确切地说,是正确的方式?
任何帮助或建议将不胜感激,如果这些问题是愚蠢的抱歉!
最佳答案 如果用户和管理员之间存在多对多关系,则建议的分配表将起作用.由于您已将关系描述为1对多(一个管理员可能拥有多个用户),因此我只需将admin_id列添加到users表中,并将其作为自引用外键返回到users表.
CREATE TABLE users {
user_id int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
user_type int NOT NULL REFERENCES user_types(user_type_id),
ssn char(10) NOT NULL,
password varchar(40) NOT NULL,
first_name varchar(30) NOT NULL,
last_name varchar(30) NOT NULL,
address varchar(80) NOT NULL,
admin_id int REFERENCES users(user_id)
} engine = InnoDB;