数据库表的设计

数据库表的设计,第1张

1、若是一对多或多对一的对象存到数据库表,原则上应该先观察对象的基本属性,然后设计一个数据表保存此对象的基本数据,并在数量关系多的一方,加外键描述数据之间的关系;

2、若是多对多对象的数据库表,原则上也是观察该对象的基本属性,然后设计一个表来保存此对象的基本数据,且需要加一个中间表来描述数据的关系;

3、若是一对一的对象的数据库设计, 除了上述 *** 作,还因为一对一的对象有主从关系,因此可加入自连接表进行设计。

1,数据表与数据表之间有关联(Relationship)是肯定的,但是不一定要用外键(ForeignKey),为什么?外键本质是一种约束(Constraint),该约束决定了你在增删改查的时候都会有额外开销。实际上数据库在处理外键的时候估计也是创建一个中间表根据中间表来做关联 *** 作,完成后再删除2,“对于“N对N”的关系,两个Model之间肯定是需要一张中间表的,比如Student、Class之间选课关系,是多对多的,肯定需要一张Enroll的表来维持,记录两个表的主键(PrimaryKey),但是不需要在数据库层加外键约束,只需要加两个索引,或作为联合主键。3,至于查询,尽量不用JOIN。但是问题是我确确实实是需要知道多个表的信息。比如我要知道某门课(Class,已知ID)的信息,同时还有选上该课(Enrolled)的学生信息(Student)。使用JOIN?没问题,我相信你可以写出一个很长的JOIN语句。但是,可能有的地方大概这样实现的(伪代码):getClassInfo(@class_id){SELECTclass_col1,class_col2FROMclassWHEREclassid=@class_id}getStudentInfo(@class_id){SELECTstudent_col1,student_col2FROMstudentWHEREstudentidIN(SELECTenrollstudent_idFROMenrollWHEREenrollclass_id=@class_id)}两种方案各有优缺。后者最大的一个优点是灵活,比如我们引入缓存(Caching)。一般来说,一个学校class数量不多,并且经常被查询,系统可能会引入缓存层(如memcached、redis)来存放class对象。那么上面的getClassInfo其实会变为{if(memcachedhas(@class_id)!=null){returnmemcachedget(@class_id);}//查询数据库(只有class表),和上面的SQL一样memcachedset(@class_id,class_object);returnclass_object;}

一般两层关系的数据结构可以设计主从表,通过主表主键进行关联:如通过ID关联主从表Header和Details两部分。超过两层关系的数据结构建议只创建一张表,主表数据重复冗余即可。不建议创建多个关系复杂的中间表,表越多后期数据处理就约麻烦,出错率越高。

以上就是关于数据库表的设计全部的内容,包括:数据库表的设计、设计数据库时是设计表越少越好,还是越多越好、在Access数据库中,建立表之间一对多的关联关系,要求主表中一定有设置_______等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9678879.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存