SQL反模式
SQL反模式翻译
爱此清夜雨
--
展开
-
SQL反模式:实体-属性-值(EAV)问题(二)
在上一篇文章中,介绍了EAV模式存在的问题,文章链接如下: https://blog.csdn.net/dh858115/article/details/104203110 那么针对EAV的问题有什么解决方案呢? 解决方案1.单表法 将所有的属性编程列的方式存储起来,这样可以通过列的类型限制不合法的数据,如创建以下表 CREATE TABLE Issues1 ( issue_id...原创 2020-02-07 20:34:34 · 309 阅读 · 0 评论 -
SQL反模式:实体-属性-值(EAV)问题(一)
但以下关系存在时,可能会将数据设置成为EAV模式,比如一个问题(Issue),可能有继承它的bug和特性(FeatureRequest),他们的关系如下,引用AntiPatterns 针对上面的关系,如果考虑表格的列可能扩展的情况,设计成EVA(Entity-Atrribute-Value)如下: CREATE TABLE Issues ( issue_id int PRIMA...原创 2020-02-06 22:25:30 · 672 阅读 · 0 评论 -
SQL反模式-简单树问题(二)
上一篇文章介绍,简单树的结构不能使用上级Id来存储,会带来查询等问题,并提供了2个解决方案。分别是使用存储全路径的列和嵌套集合(nested sets) 解决方案:闭包表(Closure Table) 这种方案是简单且优雅的,那么具体方案是什么呢?它需要额外建一个表,比如TreePaths表,这个表的结构是这样的 Employee -----------------...原创 2020-02-04 22:35:20 · 153 阅读 · 0 评论 -
SQL反模式-简单树问题(一)
如果需要设计一个员工的实体(employee),员工有上下级关系,而一个员工的上级也是一个员工,这就是一个自关联关系。假设这个员工数据库表设计成这样: Employee ------------------ emp_id emp_name manager_id 其中manager_id是管理者的员工的emp_id,由于企业机构层级可能有很多层。因此,整个数据下来,就是一...原创 2020-02-03 22:39:10 · 108 阅读 · 0 评论 -
SQL反模式-存储多值问题
假设我们需要设计一个博客系统,有以下实体,文章(article),用户(user)。现在需要实现一个需求,需要记录一篇文章有哪些用户浏览了。于是,我们在article这个表增加了一列来记录用户浏览数据,假设这列叫做user_Id,由于一篇文章可能有多个用户访问。我们将这一列设计为varchar类型,并将多个用户的id用逗号来分割,假设有用户id分别为1,2,3的用户来访问,那么这列存...原创 2020-02-02 20:27:14 · 264 阅读 · 0 评论