Sql server 学校的数据库模式

Sql server 学校的数据库模式,sql-server,database-design,database-schema,Sql Server,Database Design,Database Schema,以下是创建数据库所需的数据库查询: 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

以下是创建数据库所需的数据库查询:

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
  • 我已经尽可能地规范化数据库,但没有宗教信仰,就像让它“点击”一样
  • 在学生之前,与教室(年级)实例直接相关。现在,我创建学生的“实例”,并将其分配给教室(年级)实例。每个实例都有一个日期,说明它属于哪一年。这有助于我保持前几年的记录,而不被恶意攻击
“名称”应该是唯一的

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 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
)
“名称”应该是唯一的

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)
)

如果我有时间,请稍后再谈。

问题到底是什么。重新表述你的问题,以便能轻松回答。但通常情况下:只需将规范化的数据保存在3nf中,然后使用它即可。问题应该是如何检索它,而不是如何保存它。