SQL таблиц с логическими переменными - PullRequest
0 голосов
/ 06 февраля 2020

Я новичок в использовании SQL и играю с другим сценарием ios.

Мой пример выглядит следующим образом:

Предположим, что мне нужна система регистрации студентов. Я создал таблицу student следующим образом:

create table student (net_id char(10) , first_name char(20)  ,
 last_name char(20) , Major char(10) , ISGraduate BOOLEAN,
                        primary key (net_id)

, где isgraduate булева переменная показывает, является ли студент аспирантом или нет.

У меня есть другая сущность, которая professor выглядит следующим образом:

 create table professor (net_id char(10) , first_name char(20) 
 , last_name char(20) , Rank char(10) , department char(20) ,
                        primary key (net_id))

Тогда, если я хочу смоделировать отношения: профессор может посоветовать многим аспирантам, тогда мне может понадобиться создать новую таблицу adviosry, но как там можно отфильтровать только аспирантов?

любая помощь будет отличной.

Спасибо.

1 Ответ

1 голос
/ 06 февраля 2020

Вы можете создать таблицу advisory следующим образом:

create table advisory (
  professor_id char(10),  
  student_id char(10),
  ISGraduate BOOLEAN default 1,
  foreign key (professor_id) references professor(net_id),
  foreign key (student_id, ISGraduate) references student(net_id, ISGraduate),
  primary key (professor_id, student_id)
); 

и добавить индекс unique в таблицу student для столбцов net_id и ISGraduate:

create table student (
  net_id char(10), 
  first_name char(20),
  last_name char(20), 
  Major char(10), 
  ISGraduate BOOLEAN,
  unique(net_id, ISGraduate),
  primary key (net_id)
);

См. Демоверсию . Также убедитесь, что флаг foreign_keys включен, выполнив:

PRAGMA foreign_keys = ON;

и получите аспирантов из этой таблицы с присоединением к student:

select s.* 
from student s inner join advisory a
on s.net_id = a.student_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...