首先,对不起,如果这可能是一个愚蠢的问题。我对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”的表,该表列出了网站的不同用户类型(我这样做是为了以后可以选择添加更多用户类型):< / p>
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)我如何以简单的方式,或者更确切地说,以正确的方式实现“管理员”和“用户”之间的一对多关系?
如果这些问题很愚蠢,我们将非常感谢您的帮助或建议!
答案 0 :(得分:1)
如果您在用户和管理员之间存在多对多关系,则建议的分配表将起作用。由于您已将关系描述为1对多(一个Admin可能有很多用户),因此我只需将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;
答案 1 :(得分:1)
在users表中添加引用用户(user_id)
的admin_userid这样,每个用户都会向用户表指向他们所属的管理员用户。
使用此专栏,医生可以列出他的所有患者,并且可以在约会时使用分配表。
但某个用户是否总是会与同一位医生/管理员会面?
假期怎么样?