Проектирование СУБД для многозначных атрибутов

Я должен спроектировать базу данных, в которой некоторая информация об использовании ресурса принтера должна быть записана в базе данных 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);

Возможно, вам понадобится добавить больше столбцов в таблицы для хранения всего, что вам нужно. Я просто догадывался о том, что ты захочешь хранить.

Другие вопросы по тегам