Прежде всего, извините, если это глупый вопрос. Я очень новичок в мире MySQL, так что ...
В любом случае, мой вопрос таков: я планирую создать базу данных, которая будет (на данный момент) иметь дело с двумя типами пользователей, скажем, Администраторы и Пользователи . Моя цель состоит в том, чтобы иметь ОДИН стол, содержащий всех пользователей, метко названных «пользователи». Ниже приведена приблизительная схема моей команды 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) Как я могу добиться отношения один-ко-многим между «администраторами» и «пользователями» простым или, вернее, правильным способом?
Любая помощь или предложения будут с благодарностью, и извините, если эти вопросы глупы!