Проектирование СУБД для многозначных атрибутов
Я должен спроектировать базу данных, в которой некоторая информация об использовании ресурса принтера должна быть записана в базе данных MySQL. Каков наилучший способ проектирования базы данных? Я не хочу создавать таблицу для каждого учащегося, так как там будет около 6000 таблиц, и эта цифра будет расти каждый год, если архивы будут поддерживаться. Также сложно создавать таблицы на основе регистрационного номера студента. Есть ли лучший способ, чем хранить многозначный атрибут для деталей печати. Пожалуйста, предложите некоторые решения. Также запросы должны быть эффективными.
2 ответа
Нет необходимости создавать разные таблицы для каждого учащегося. Просто создайте Стол СТУДЕНТА, который будет содержать личные данные учащегося, идентифицированные их регистрационным номером (скажем, Regno-PrimaryKey).
А затем еще одна таблица RESOURCE, которая будет иметь следующую схему: -RecNo Integer PK -StudentID Foriegn ключ, на который ссылается Regno в таблице ученика -Usage или Data,Time(если вам нужно)
Это будет работать, и вам не нужно создавать 6000 или более таблиц.
Вы дали очень мало информации, но вот выстрел:
create table student
(
registration_no varchar(50) not null primary key,
first_name varchar(50),
last_name varchar(50),
registration_year integer not null
);
create table printer
(
printer_id integer not null primary key,
printer_name varchar(50) not null,
ip_address varchar(50) not null,
queue_name varchar(50) not null
);
create unique index idx_printer_name on printer (printer_name);
create table printer_usage
(
usage_id integer not null primary key,
student_reg_no integer not null,
printer_id integer not null,
usage_date datetime not null,
pages integer not null
);
alter table printer_usage
add constraint fk_usage_student
foreign key (student_reg_no) references student (registration_no);
alter table printer_usage
add constraint fk_usage_printer
foreign key (printer_id) references printer (printer_id);
Возможно, вам понадобится добавить больше столбцов в таблицы для хранения всего, что вам нужно. Я просто догадывался о том, что ты захочешь хранить.