网站的数据库如何设计?
什么是好的数据库设计?
一些原则可为数据库设计过程提供指导。第一个原则是,重复信息(也称为冗余数据)很糟糕,因为重复信息会浪费空间,并会增加出错和不一致的可能性。第二个原则是,信息的正确性和完整性非常重要。如果数据库中包含不正确的信息,任何从数据库中提取信息的报表也将包含不正确的信息。因此,基于这些报表所做的任何决策都将提供错误信息。
所以,良好的数据库设计应该是这样的:
将信息划分到基于主题的表中,以减少冗余数据。
向 Access 提供根据需要联接表中信息时所需的信息。
可帮助支持和确保信息的准确性和完整性。
可满足数据处理和报表需求。
设计过程
设计过程包括以下步骤:
确定数据库的用途:这可帮助进行其他步骤的准备工作。
查找和组织所需的信息:收集可能希望在数据库中记录的各种信息,如产品名称和订单号。
划分到表中的信息:将信息项划分到主要的实体或主题中,如“产品”或“订单”。每个主题即构成一个表。
关闭信息项目导入的列 确定希望在每个表中存储哪些信息。每个项将成为一个字段,并作为列显示在表中。例如,“雇员”表中可能包含“姓氏”和“聘用日期”等字段。
指定为主键:选择每个表的主键。主键是一个用于唯一标识每个行的列。例如,主键可以为“产品 ID”或“订单 ID”。
设置表关系:查看每个表,并确定各个表中的数据如何彼此关联。根据需要,将字段添加到表中或创建新表,以便清楚地表达这些关系。
优化您的设计:分析设计中是否存在错误。创建表并添加几条示例数据记录。确定是否可以从表中获得期望的结果。根据需要对设计进行调整。
应用规范化规则:应用数据规范化规则,以确定表的结构是否正确。根据需要对表进行调整。
参考:数据库设计基础
首先来说对于这种场景有两种设计方法,这两种方法都能够满足扩展性要求
1. 把原有的横表转化为纵表存储属性,即
产品表:(product_id, product_name, product_class)
产品属性表:(product_id, property_id , property_name , property_value)
2. 保持原有横表设计思路,但是弹性字段含义单独元数据表存储
产品表:(product_id, product_name, product_class, prop1, prop2, .... propn)
产品属性含义元数据表
(product_class , prop1_name ,prop2_name, ..... propn_name)
对于两种设计方法,个人理解为
a. 对于首页打开就必须要能够快速查询出来的属性,而且这些属性本身各类产品差异不大。而对于差异大的属性基本都是针对特定一个产品查询。可以采用方案1来做。
b. 首页显示产品列表时候就存在要显示出不同产品属性情况,采用方案2来做。当我们处理的是一个product list的时候,由于存在数据表本身的关联场景,用方案1会比麻烦,也影响性能。
首先建立一个数据表"film"用来保存简短文字信息,其中包含:电影发布时有名字,主演,简介,归属栏目,发布电影的URL链接。在创建一个表(考虑到是小型网站,如果中型的话,可以选择10个,像discuz一样)"attachement",用来保存,上传截图,上传视频。这个表用一个外键与film表连接。中间在外键上加索引。
希望我的回答对你有帮助!
1、设计调研问卷的基本信息表,包括调研问卷编号,主题,应用单位,调研起始时间等。
2、设计调研题库表,题库表一般包含4种不同表格,一种为判断类型、一种为单选类型、一种为多选类型、一种为问答类型(填空类型可以归纳为此类型)
3、设计调研问卷试题关联表,包含调研问卷编号,试题编号。
4、设计调研问卷答案表,下分为4种不同表格,判断、单选、多选、问答,包括试题编号,回答者编号,答案等信息。
方法/步骤
常见数据库设计
请点击输入图片描述
一主多从
冗余读库带来的副作用:读写有延时,可能不一致;写仍然是单点,不能保证写高可用。
请点击输入图片描述
主库冗余
存在数据不一致问题
请点击输入图片描述
数据读取速度
请点击输入图片描述
利用缓存来实现
请点击输入图片描述
常见缓存设计如下
请点击输入图片描述