标签: denormalization

规范化是否真的会损害高流量网站的性能?

我正在设计一个数据库,我想规范化数据库.在一个查询中,我将加入大约30-40个表.如果它变得非常受欢迎,这会损害网站性能吗?这将是主要查询,它将在50%的时间内被调用.我将加入关于两个表的其他查询.

我现在可以选择标准化或不标准化,但如果标准化将来成为问题,我可能需要重写40%的软件,这可能需要很长时间.在这种情况下,规范化真的会受到伤害吗 在我有空的时候,我应该现在正常化吗?

c# performance normalization denormalization sql-server-2008

6
推荐指数
1
解决办法
774
查看次数

地址簿数据库设计:denormalize?

我正在设计一个联系人管理器/地址簿式应用程序,但不能满足于数据库设计.

在我目前的设置中,我有一个联系人,其中包含地址,电话号码,电子邮件和组织.所有联系人属性当前都是单独的表,其中fk到Contact表.不用说,联系人可以拥有任何数量的这些属性.

现在,如果我想在应用程序中阅读联系人,我发现自己将所有这些表连接在一起.由于没有对相关表执行过滤,反向查找,排序等,将相关字段作为json编码列表存储在Contact表的直接属性上不是更好/更简单的解决方案吗?

例如,不是将fk连接到带有3个条目的phonenumber表,只需编码所有的phonenumber并将它们存储到Contact表的字段中?

任何见解真的很感激!(fyi我正在使用Django虽然这并不重要)

sql database-design django-models denormalization

6
推荐指数
1
解决办法
1227
查看次数

为React + Redux应用发送回规范化或非规范化的API响应更好吗

我正在编写一个react-redux应用程序。首先,它调用单个端点,该端点返回大量数据作为高度嵌套的JSON。然后,我对其进行规范化并将其放入我的redux-orm模式。
对我来说,在后端创建嵌套数据只是为了遍历前端的嵌套数据以对其进行规范化似乎是很愚蠢的,因为它来自标准化的PostgreSQL数据库。

Database = Normalized --> 
API = Denormalized --> 
Frontend = Normalized
Run Code Online (Sandbox Code Playgroud)

只是发送回标准化的API响应是最佳实践吗?

normalize denormalization reactjs redux redux-orm

6
推荐指数
1
解决办法
815
查看次数

存储数据库记录的数量是多余的吗?

我正在使用Rails和MySQL,并且有一个基于行计数的效率问题.

我有一个Project模型has_many :donations.

我想计算一个项目的独特捐赠者数量.

projects表中有一个字段被调用num_donors,并在创建新的捐赠者时增加它是一个好主意吗?

或者@num_donors = Donor.count(:select => 'DISTINCT user_id')由于数据库优化,在效率方面类似或相似?这是否需要我为user_id我想要计算的任何其他字段创建索引?

总结捐赠总额的答案是否相同?

mysql database ruby-on-rails query-optimization denormalization

5
推荐指数
4
解决办法
954
查看次数

SystemSettings的表设计,最佳模型

有人建议移动一个充满设置的表,其中每列是设置名称(或类型),行是客户及其各设置的相应设置.

ID | IsAdmin | ImagePath
------------------------------
12 | 1 |\path\to\images
34 | 0 | \路径\为\图片

这样做的缺点是每次我们想要一个新的设置名称(或类型),我们改变表(通过sql)并添加新的(列)设置名称/类型.然后更新行(以便每个客户现在都有该设置的值).

新表设计方案.建议是有一个用于设置名称的列和另一个用于设置的列.
ID | SettingName | SettingValue
----------------------------
12 | IsAdmin | 1
12 | ImagePath |\path\to\images
34 | IsAdmin | 0
34 | ImagePath | \路径\为\图片

他们提出的观点是,添加新设置就像对行的简单插入语句一样简单,没有添加列.

但是对于第二种设计来说感觉不对,它看起来很糟糕,但我无法提出反对它的任何论据.我错了吗?

sql database-design normalization denormalization

5
推荐指数
1
解决办法
1083
查看次数

ActiveRecord - 非规范化案例研究

处理下面8个不同SQL问题的最佳方法是什么.

我在数据库模式下面放置了它,它在我的Rails模型中如何表示,以及我需要从数据库中获取的数据的七个问题.我回答了一些问题,其他问题我不确定最佳解决方案.

问题#7是一个曲线球,因为它可能会改变所有其他问题的答案.

标准

  1. 不应该要求n + 1个查询.多个查询都可以,但如果返回的每一行都需要一个额外的查询,那么它就不可扩展.
  2. 不应该要求后处理来过滤SQL可以自己完成的结果.例如,第五个答案不应该是从数据存储中拉出所有学生,然后删除那些没有课程的学生.
  3. 检索对象的计数不应该触发另一个SQL查询.
  4. 如果SQL允许我聚合数据,则不必通过非规范化添加数据库列
  5. NOSQL解决方案(如MongoDB或CouchDB)是否更适合回答以下所有问题?

数据库架构

Students
-------
ID
Name

Courses
-----
ID
Name
Grade

Enrollments
----------
ID
Student_ID
Course_ID

ActiveRecord模型


class Course < ActiveRecord::Base
  has_many :enrollments
  has_many :students, :through=>:enrollments
end
class Enrollment < ActiveRecord::Base
  belongs_to :student
  belongs_to :course
end
class Student < ActiveRecord::Base
  has_many :enrollments
  has_many :courses, :through => :enrollments
end
Run Code Online (Sandbox Code Playgroud)

问题

1)检索9年级数学课程的所有学生

SQL


SELECT s.* FROM Students s
LEFT JOIN Enrollments e on e.student_id = s.id
LEFT JOIN Courses c on e.course_id …
Run Code Online (Sandbox Code Playgroud)

activerecord ruby-on-rails denormalization

5
推荐指数
1
解决办法
2369
查看次数

如何使用逗号分隔值的字符串加入?

我想加入2个表,一个表有一个电子邮件字段,另一个表有逗号分隔的电子邮件列表.

这是场景:

Team
--------------
- team_id
- email_list (this is a comma separated email address)


Persons
--------------
 - person_id
 - email
Run Code Online (Sandbox Code Playgroud)

我试过这样的事情:


SELECT team.* FROM team INNER JOIN persons ON trim(persons.email) IN (CONCAT('\'',REPLACE(REPLACE(team.email_list,' ',''),',','\',\''),'\''))
Run Code Online (Sandbox Code Playgroud)

但是IN子句中的字符串似乎就像这个"'email1','email2','email3'"

有什么想法让它发挥作用?

mysql join denormalization

5
推荐指数
1
解决办法
1266
查看次数

如何在Cassandra中存储嵌套数据

考虑以下"文档",这两个文档将如何存储在集合中.

// collection posts:
{
  id: 1,
  name: "kingsbounty",
  fields: {
    "title": {
      "title": "Game Title",
      "value": "Kings Bounty"
    }
  },
  {
    "body": {
      "title": "Game Description",
      "value": "Kings Bounty is a turn-based fantasy..."
    }
  }
}

// collection posts:
{
  id: 2,
  name: "outrun",
  fields: { 
    "vehicle": {
      "title": "Vehicle",
      "value": "Ferrari Testarossa"
    },
    "color": {
      "title": "Vehicle Color",
      "value": "Red"
    },
    "driver": {
      "title": "Driver",
      "value": "David Hasselhoff"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

注意字段是不同大小的地图.

因为cassandra不允许定义这种类型 fields <map <map, text>>

我想学习"cassandra"的方式去做,非正规化的方式.这种方式不是非规范化的,但可以用来存储和检索任意长度的嵌套数据. …

database denormalization cassandra

5
推荐指数
1
解决办法
2021
查看次数

更新 Cassandra 中的非规范化数据

假设我们有可以评论视频的用户,并且我们希望显示带有用户名的视频的所有评论。用户也可以转到他的个人资料页面并更改他的名字。

基于此答案 Cassandra非规范化数据模型中介绍的 Cassandra 数据建模实践,我创建了这样的表:

CREATE TABLE users (
   user_id UUID,
   first_name TEXT,
   last_name TEXT,
   PRIMARY KEY ((user_id))
); 

CREATE TABLE comments_by_video (
   video_id UUID,
   added_at TIMESTAMP,
   user_id UUID,
   comment TEXT,
   first_name TEXT,
   last_name TEXT,
   PRIMARY KEY ((video_id), added_at, user_id)
);
Run Code Online (Sandbox Code Playgroud)

看起来棒极了,我们只需一个查询就可以获得视频评论所需的数据。

现在,让我们考虑这样的用例。

用户创建了大量评论(例如 10 000 条),然后决定更改他的名字。我们应该更新所有评论以更改他的名字吗?有没有办法让它变得高效?

data-modeling denormalization cassandra nosql

5
推荐指数
1
解决办法
1574
查看次数

如何为 Pandas Dataframe 非规范化 YAML?

我正在尝试将 YAML 文件中的数据导入 Pandas DataFrame。以下面的例子为例data.yml

---
 - doc: "Book1"
   reviews:
     - reviewer: "Paul"
       stars: "5"
     - reviewer: "Sam"
       stars: "2"
 - doc: "Book2"
   reviews:
     - reviewer: "John"
       stars: "4"
     - reviewer: "Sam"
       stars: "3"
     - reviewer: "Pete"
       stars: "2"
...
Run Code Online (Sandbox Code Playgroud)

所需的 DataFrame 如下所示:

     doc reviews.reviewer reviews.stars
0  Book1             Paul             5
1  Book1              Sam             2
2  Book2             John             4
3  Book2              Sam             3
4  Book2             Pete             2
Run Code Online (Sandbox Code Playgroud)

我试过以不同的方式将 YAML 数据提供给 Pandas(如with open('data.yml') as f: data = pd.DataFrame(yaml.load(f))),但单元格始终包含嵌套的字典。此 …

python yaml denormalization dataframe pandas

5
推荐指数
2
解决办法
5996
查看次数