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