标签: database-design

EAV-在电子商务案例中,它真的是反模式吗?

我正在构建一个新系统,该系统将需要可扩展的数据模型。它非常复杂,但是需要这种结构的系统部分与电子商务系统的产品部分非常相关,因此我将以此为例。

想象一下一组公司。每家公司都有一系列的产品,其中有一些基本的属性,如nameskudescriptionprice等。除了这些基本属性,公司应该能够创建n定制的产品属性,属于公司(即美孚公司不应该能够看到Acme Inc.的自定义属性)。除此之外,每个公司都应该能够为每个产品转换这些属性;所以每个自定义属性值基本上从一个构造attribute,一个productlanguage和一个value

我确实知道,如果您存储固定数量的属性,而需要扩展属性数量的不是系统所有者,则EAV结构是一种反模式。

所以我的问题是-您将如何实现?在这种情况下,EAV结构真的是反模式吗?Magento是使用这种设计的人的经典示例,似乎他们建立了一个怪物,不得不通过实现平面索引表来“修复”它。但是,是否还有其他数据库设计模式可以实现这种灵活性?

database-design entity-attribute-value

0
推荐指数
1
解决办法
622
查看次数

在进行数据库规范化时,将重复的行信息集组合成新的实体是什么?

我对某些数据库规范化有些困惑,并认为我会问StackOverflow:

想象一下,您具有以下将产品与颜色相关联的关系。请注意,产品1和产品2都使用相同的颜色集(蓝色和绿色)。

Product_Color                         Color
+-------------+-------------+     +-------------+-------------+
| Product*    | Color*      |     | ColorId*    | Name        |
+-------------+-------------+     +-------------+-------------+
| 1           | 1           |     | 1           | Blue        |
| 1           | 2           |     | 2           | Green       |
| 2           | 1           |     +-------------+-------------+
| 2           | 2           |
+-------------+-------------+
Run Code Online (Sandbox Code Playgroud)

如果创建两个新的关系ColorSet和ColorSet_Color,则可以通过将这4个关系连接在一起来显示相同​​的信息。

Product_ColorSet:                 ColorSet_Color:             
+-------------+-------------+     +-------------+-------------+
| Product*    | ColorSetId* |     | ColorSetId* | ColorId*    |
+---------------------------+     +-------------+-------------+
| 1           | 1           |     | 1           | 1           |
| 2           | …
Run Code Online (Sandbox Code Playgroud)

database-design database-normalization

0
推荐指数
1
解决办法
127
查看次数

如何在Django中记录模型的每日排名?

我有一个模型,我必须记录一个PositiveSmallIntegerField对象,每天更新相关的分数.

class Student(models.Model):
    name = models.CharField(max_length=20)
    grade = models.ForeignKey(Grade)
    rank = ??
Run Code Online (Sandbox Code Playgroud)

具有此模型的对象数量永远不会超过100,并且分数/等级必须保留180天.该数据库是Postgresql 9.2.

每天从另一个应用程序的分数计算排名,我想存储在与学生模型相关的数据库中,我坚持模型设计,我不知道,应该为排名做些什么?Django中有重复的字段吗?

任何线索或经验将非常感激

谢谢.

更新:(添加示例)

数据库必须看起来像这样,

+---------+-------+----------+----------+----------+----------+----------+----------+
| Student | Grade | 08-01-15 | 08-02-15 | 08-03-15 | 08-04-15 | 08-05-15 | 08-06-15 |
+---------+-------+----------+----------+----------+----------+----------+----------+
| Alex    |     5 |        2 |        1 |        1 |        2 |        3 |        2 |
| John    |     5 |        3 |        2 |        3 |        4 |        2 |        4 |
| Susan   |     5 |        1 …
Run Code Online (Sandbox Code Playgroud)

python django postgresql database-design django-models

0
推荐指数
1
解决办法
2171
查看次数

表结构 - 链接一个具有多个类ID的学生

我目前正面临着我设计的桌面问题(请参见下文).一个学生可以属于多个班级.我开始在以后的一列中存储多个值,以了解这是一个很大的不.例如,class_id在存储由逗号分隔的值时,faces会出现类型丢失和成为字符串的问题.我已阅读制作文章,它表示制作两个表一个用于课堂,另一个用于学生,但不确定如何插入基本上将学生链接到多个班级的数据.什么是最好的方法?

目前的做法:

------------        ----------      ------------    -------------
student_fname       student_id      class_name      class_id
------------        ----------      ------------    -------------
james               Vre94b3JpXO     math,science    5697,5768
jim                 JzqQ2zRVNm1     art, music      7604,7528
jenny               xgqv9P42eYL     physical-ed     6422    
kyle                QLNM0Wbyqk0     computer,jrotoc 6315,8797
kimberly            P2egAddWN0Q     culinary-arts   8069
kayla               EGNDjWAreAy     science, art    5768,7604 
noah                bPeOyMMONGr     math, music     5697,7528
nataly              9Op53GGmqk5     jrotc           8797
Run Code Online (Sandbox Code Playgroud)

建议的方法:

------------        ----------
class name          class id
------------        ----------
math                5697
science             5768
computer            6315
physical-ed         6422
music               7528
art                 7604
jrotc               8797
culinary-arts       8069

------------        ----------
student fname …
Run Code Online (Sandbox Code Playgroud)

mysql database-design normalization

0
推荐指数
1
解决办法
2661
查看次数

NoSQL数据库设计用于具有多个限制的查询(Firebase)

我需要最佳实践技巧,以增强我的noSQL数据库(在Firebase上托管)的性能。此外,我需要有关如何构造节点的技巧。

该数据库存储产品信息,具有三个主要属性:

$productId          
     /date           
     /category           
     /subcategory
Run Code Online (Sandbox Code Playgroud)

在我的网站上,我有三种看法:

  • 检索最后4个产品(orderBy日期)
  • 检索类别X的最后4个产品(按日期)
  • 检索类别X和子类别Y的最后4个产品(按日期)。

请注意,我还有一个节点product_images,其子节点与productID匹配。因此,按以下方式构造数据库:

$categoryId
        $subCategoryId 
               $productId
Run Code Online (Sandbox Code Playgroud)

无法使用,因为我需要事先知道$ categoryId和$ subCatrgoryId,然后才能将其与$ productId匹配。这也将使检索最后4个产品变得困难。

我将如何高效地构建noSQL数据库,以及如何使用Firebase筛选出具有多个限制的产品来检索产品?

我知道在Firebase中可以使用orderByChild和equalTo,但这仅适用于一个限制,而我必须处理一到三个。

database database-design nosql firebase

0
推荐指数
1
解决办法
730
查看次数

哪个更节省空间?

假设我有一个包含100列相同数据类型和100行的表A.

表B具有2列和5000行相同数据类型的上表列.

哪个表需要更多磁盘空间来存储哪个更高效?

sql oracle database-design

0
推荐指数
2
解决办法
128
查看次数

目前有多对多的关系,但现在需要对其中一个实体进行分组

我有一个案例,有代表负责某些客户.他们可以负责许多客户,这些客户可以有很多代表.我有表reps,clients和连接表client_reps.

在我们公司中,将多个销售代表视为一个集团是很常见的.所以他们甚至有一个组的名称和他们自己的组电子邮件地址.我怎么才能开始在现有结构中正确引入群体概念?

举个例子,我们有一个ID的代表1,23.然后是一个有ID的客户端1.所有这些销售代表都有自己的帐户名称和电子邮件地址.但现在他们想要归入一个单独的实体,拥有自己的名字和电子邮件.它们将被分配为单个组,而不是分配这三个单独的代表.系统还必须知道该组由这三个代表组成,用于报告目的.

甚至可以单独分配这些代表,但只要系统可以区分这三个是特定组的一部分.

mysql database database-design

0
推荐指数
1
解决办法
47
查看次数

构建具有两个明确部分的应用程序的方法

我在一个拥有无限数量表的项目中,我们必须找到一个为平台带来可扩展性的解决方案,而我们似乎并没有弄清楚什么是非常好的.

该平台是求职者,因此它有两个明确的部分,候选人和公司.

我们一直在思考并找到那些可行的解决方案来重新构建当前的数据库,因为它是一个怪物.

  • 2 API的2个数据库:这种方式需要大量的数据库迁移工作,但会非常清楚地定义平台的不同部分.
  • 2 API的1数据库:这样做,数据库工作将减少以规范我们现在所拥有的,但我们仍然会将平台的两个部分在逻辑上分开.
  • 1 API 1数据库:规范化数据库,并在同一个API中执行所有操作,尝试在逻辑上将所有内容分开,使其可扩展,但同时可以从一个部分访问另一个部分.

现在我更加关注1 API 1数据库解决方案,但我们希望阅读一些有经验的用户做出最终选择.

谢谢!

mysql database architecture api database-design

0
推荐指数
1
解决办法
110
查看次数

如何进行此查询

user
- - - - - - - - - - - - - - -
id        last_activity
500       8:00PM
100       7:00PM
200       2:00PM

institution
- - - - - - - - - - - - - - -
user_id        name
500            Harvard Institution

instructor
- - - - - - - - - - - - - - -
user_id        job_title        fname        lname
100            Dr.              Alex         Adam

student
- - - - - - - - - - …
Run Code Online (Sandbox Code Playgroud)

php mysql database database-design

0
推荐指数
1
解决办法
66
查看次数

如何向firebase数据库添加更多表?

我正在尝试构建一个连接到Firebase数据库的crud项目.我来自LAMP堆栈环境.我还不太了解这个MEAN堆栈.我通常会为这些任务编写一个迁移脚本.

我正在尝试添加3个表.

firebase.json

{
  "database": {
    "rules": "database.rules.json"
  },
  "hosting": {
    "public": "dist",
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

database.rules.json

{
  "rules": {
    ".read": true,
    "contacts": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    },
    "users": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    },
    "logs": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    },
    "cards": {
      "$uid": {
        ".read": "$uid === auth.uid", …
Run Code Online (Sandbox Code Playgroud)

json database-design firebase firebase-realtime-database

0
推荐指数
1
解决办法
2522
查看次数