在关系数据库设计中,设计关系模式是( )阶段的任务
在关系数据库设计中,设计关系模式是数据库设计中逻辑设计阶段的任务。
逻辑设计的主要步骤包括:
1、初始模式的形成。
2、子模式设计。
3、应用程序设计梗概。
4、模式评价。
5、修正模式。
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。
毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。
数据库管理员的任务。
设计关系模式是数据库管理员的任务,它的目的是将数据存储在一个有效的方式,以便用户可以容易地访问和检索它们,关系模式定义了数据库中不同表之间的关系,并指定了每个表中包含的字段,以及字段之间的关系。
关系数据库是一种数据库,它将数据存储在不同的表中,使用关系来表示数据之间的关系,允许用户跨多个表查询数据。
在关系型数据库中,表的“列”称为“字段” ,每个字段包含某一题与对象或类关联的信息。就像“通讯录”数据库中,“姓名”、“联系电话”这些都是表中所有行共有的性,所以把这些列称为“姓名”字段和“联系电话”字段。
关系型数据库按照结构化的方法存储数据,每个数据表都必须对各个字段定义好,也就是先定义好表的结构,再根据表的结构存入数据。
扩展资料:
在进行关系型数据库的设计过程中,要遵循以下几个原则,借此可以提高数据库的存储效率、数据完整性和可扩展性。
1、命名规范化
在概念模型设计中,对于出现的实体、属性及相关表的结构要统一。例如在数据库设计中,指定学生Sstudent,专指本科生,相关的属性有:学号、姓名、性别、出生年月等,及每个属性的类型、长度、取值范围等都要进行确定,这样就能保证在命名时不会出现同名异义或异名同义、属性特征及结构冲突等问题。
2、数据的一致性和完整性
在关系型数据库中可以采用域完整性、实体完整性和参照完整性等约束条件来满足其数据的一致性和完整性,用check、default、null、主键和外键约束来实现。
3、数据冗余
数据库中的数据应尽可能地减少冗余,这就意味着重复数据应该减少到最少。例如:若一个部门职员的电话存储在不同的表中,假设该职员的电话号码发生变化时,冗余数据的存在就要求对多个表进行更新操作,若某个表不幸被忽略了,那么就会造成数据不一致的情况。所以在数据库设计中一定要尽可能存在少地冗余。
4、范式理论
在关系数据库设计时,一般是通过设计满足某一范式来获得一个好的数据库模式,通常认为3NF在性能、扩展性和数据完整性方面达到了最好的平衡,因此,一般数据库设计要求达到3NF,消除数据依赖中不合理的部分,最终实现使一个关系仅描述一个实体或者实体间一种联系的目的。
2,逗对于 逗N对N地 的关系,两个 Model 之间肯定是需要一张中间表的,比如 Student、Class 之间选课关系,是多对多的,肯定需要一张 Enroll 的表来维持,记录两个表的主键(Primary Key),但是不需要在数据库层加外键约束,只需要加两个索引,或作为联合主键。
3,至于查询,尽量不用 JOIN。但是问题是我确确实实是需要知道多个表的信息。
比如我要知道某门课(Class,已知 ID)的信息,同时还有选上该课(Enrolled)的学生信息(Student)。
使用 JOIN 看没问题,我相信你可以写出一个很长的 JOIN 语句。
但是,可能有的地方大概这样实现的(伪代码):
getClassInfo(@class_id)
{ SELECt class_col1, class_col2 FROM class WHERe class.id = @class_id }
getStudentInfo(@class_id)
{ SELECt student_col1, student_col2 FROM student WHERe student.id IN (SELECt enroll.student_id FROM enroll WHERe enroll.class_id = @class_id) }
两种方案各有优缺。
后者最大的一个优点是灵活,比如我们引入缓存(Caching)。
一般来说,一个学校 class 数量不多,并且经常被查询,系统可能会引入缓存层(如 memcached、redis)来存放 class 对象。
那么上面的 getClassInfo 其实会变为
{
if(memcached.has(@class_id) != null)
{
return memcached.get(@class_id)
}
//查询数据库(只有 class 表),和上面的 SQL 一样
memcached.set(@class_id, class_object)
return class_object
}