Схема базы данных для школы - PullRequest
0 голосов
/ 30 марта 2011

Вот запрос к базе данных, необходимый для создания базы данных:

create table Area
(
AreaId int primary key identity(1,1),
Name nvarchar(64) not null
)

create table Level
(
LevelId int primary key identity(1,1),
Name nvarchar(32) not null,
Principle nvarchar(512) not null
)

create table Subject
(
SubjectId int primary key identity(1,1),
AreaId int foreign key references Area(AreaId),
LevelId int foreign key references Level(LevelId),
Name nvarchar(32) not null,
Abbreviation nvarchar(16)
)

create table StaffType
(
StaffTypeId int primary key identity(1,1),
Name nvarchar(64) not null
)

create table Staff
(
StaffId int primary key identity(1,1),
StaffTypeId int foreign key references StaffType(StaffTypeId),
Name nvarchar(128) not null,
LastNameFather nvarchar(256) not null,
LastNameMother nvarchar(256) not null,
DateOfBirth datetime,
PlaceOfBirth nvarchar(256),
Sex nvarchar(8) not null,
Carnet nvarchar(64),
Telephone nvarchar(64),
MobilePhone nvarchar(64),
Address nvarchar(256),
FatherName nvarchar(256),
MotherName nvarchar(256),
FatherContactNumber nvarchar(64),
MotherContactNumber nvarchar(64),
FatherPlaceOfWork nvarchar(64),
MotherPlaceOfWork nvarchar(64),
DateOfHiring datetime,
YearsOfService int,
Formation nvarchar(128)
)

create table Grade
(
GradeId int primary key identity(1,1),
Name nvarchar(32) not null,
LevelId int foreign key references Level(LevelId),
Observation nvarchar(256)
)

create table GradeInstance
(
GradeInstanceId int primary key identity(1,1),
StaffId int foreign key references Staff(StaffId),
GradeId int foreign key references Grade(GradeId),
Name nvarchar(32) not null,
Year datetime
)

create table Student
(
StudentId int primary key identity(1,1),
RUDE int,
Name nvarchar(64) not null,
LastNameFather nvarchar(256) not null,
LastNameMother nvarchar(256) not null,
DateOfBirth datetime not null,
PlaceOfBirth nvarchar(128),
Sex nvarchar(8),
Carnet nvarchar(32),
Telephone nvarchar(64),
MobilePhone nvarchar(64),
Address nvarchar(256),
FatherName nvarchar(512),
MotherName nvarchar(512),
FatherMobilePhone nvarchar(64),
MotherMobilePhone nvarchar(64),
FatherProfession nvarchar(64),
MotherProfession nvarchar(64),
FatherPlaceOfWork nvarchar(256),
MotherPlaceOfWork nvarchar(256),
Observations nvarchar(3000)
)

create table StudentInstance
(
StudentInstanceId int primary key identity(1,1),
GradeInstanceId int foreign key references GradeInstance(GradeInstanceId),
StudentId int foreign key references Student(StudentId)
)

create table StudentGradeReport
(
StudentGradeReportId int primary key identity(1,1),
StudentInstanceId int foreign key references StudentInstance(StudentInstanceId),
SubjectId int foreign key references Subject(SubjectId),
FirstTrimester int,
SecondTrimester int,
ThirdTrimester int,
FinalGrade int
)

Если вы найдете атрибут, который должен быть проверен на нуль, не обращайте на него внимания. Я обсудил это с клиентом, и они хотят, чтобы некоторые вещи были оставлены пустыми, если так выбрал конечный пользователь.

Моя главная задача при разработке этой базы данных заключалась в том, как связать студента с оценкой здесь и сейчас, но вести записи за предыдущие годы и узнать, какую оценку он получил в 2009 году. Видите?

Я думаю, что я проделал хорошую работу, но вы никогда не знаете - улей здесь, вероятно, найдет недостаток, и я хотел бы получить некоторую обратную связь.

  • Больше не использует SQLite, но MSSQL.
  • Я пытался нормализовать базу данных столько, сколько мог, но не религиозно, а столько, сколько потребовалось, чтобы она «щелкнула».
  • До того, как учиться, был непосредственно связан с экземпляром класса (класса). Теперь я создаю «экземпляры» студентов и назначаю их экземпляру класса (класса). У каждого экземпляра есть дата, указывающая, к какому году он принадлежит Это помогает мне вести учет прошлых лет без грязных хаков.

1 Ответ

1 голос
/ 14 апреля 2011
create table Area
(
AreaId int primary key identity(1,1),
Name nvarchar(64) not null
)

«Имя» должно быть УНИКАЛЬНО.

create table Level
(
LevelId int primary key identity(1,1),
Name nvarchar(32) not null,
Principle nvarchar(512) not null
)

«Имя» должно быть УНИКАЛЬНО.

create table Subject
(
SubjectId int primary key identity(1,1),
AreaId int foreign key references Area(AreaId),
LevelId int foreign key references Level(LevelId),
Name nvarchar(32) not null,
Abbreviation nvarchar(16)
)

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

  • Набор {AreaId, LevelId} должен быть УНИКАЛЬНЫМ.
  • «Имя» должно быть УНИКАЛЬНО.
  • «Сокращение»должно быть УНИКАЛЬНО.

У меня заканчивается время.

create table StaffType
(
StaffTypeId int primary key identity(1,1),
Name nvarchar(64) not null
)

«Имя» должно быть УНИКАЛЬНО.

Еще позже, если у меня будет время.

...