我正在构建一个新系统,该系统将需要可扩展的数据模型。它非常复杂,但是需要这种结构的系统部分与电子商务系统的产品部分非常相关,因此我将以此为例。
想象一下一组公司。每家公司都有一系列的产品,其中有一些基本的属性,如name,sku,description,price等。除了这些基本属性,公司应该能够创建n定制的产品属性,属于公司(即美孚公司不应该能够看到Acme Inc.的自定义属性)。除此之外,每个公司都应该能够为每个产品转换这些属性;所以每个自定义属性值基本上从一个构造attribute,一个product,language和一个value。
我确实知道,如果您存储固定数量的属性,而需要扩展属性数量的不是系统所有者,则EAV结构是一种反模式。
所以我的问题是-您将如何实现?在这种情况下,EAV结构真的是反模式吗?Magento是使用这种设计的人的经典示例,似乎他们建立了一个怪物,不得不通过实现平面索引表来“修复”它。但是,是否还有其他数据库设计模式可以实现这种灵活性?
我对某些数据库规范化有些困惑,并认为我会问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) 我有一个模型,我必须记录一个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) 我目前正面临着我设计的桌面问题(请参见下文).一个学生可以属于多个班级.我开始在以后的一列中存储多个值,以了解这是一个很大的不.例如,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) 我需要最佳实践技巧,以增强我的noSQL数据库(在Firebase上托管)的性能。此外,我需要有关如何构造节点的技巧。
该数据库存储产品信息,具有三个主要属性:
$productId
/date
/category
/subcategory
Run Code Online (Sandbox Code Playgroud)
在我的网站上,我有三种看法:
请注意,我还有一个节点product_images,其子节点与productID匹配。因此,按以下方式构造数据库:
$categoryId
$subCategoryId
$productId
Run Code Online (Sandbox Code Playgroud)
无法使用,因为我需要事先知道$ categoryId和$ subCatrgoryId,然后才能将其与$ productId匹配。这也将使检索最后4个产品变得困难。
我将如何高效地构建noSQL数据库,以及如何使用Firebase筛选出具有多个限制的产品来检索产品?
我知道在Firebase中可以使用orderByChild和equalTo,但这仅适用于一个限制,而我必须处理一到三个。
假设我有一个包含100列相同数据类型和100行的表A.
表B具有2列和5000行相同数据类型的上表列.
哪个表需要更多磁盘空间来存储哪个更高效?
我有一个案例,有代表负责某些客户.他们可以负责许多客户,这些客户可以有很多代表.我有表reps,clients和连接表client_reps.
在我们公司中,将多个销售代表视为一个集团是很常见的.所以他们甚至有一个组的名称和他们自己的组电子邮件地址.我怎么才能开始在现有结构中正确引入群体概念?
举个例子,我们有一个ID的代表1,2和3.然后是一个有ID的客户端1.所有这些销售代表都有自己的帐户名称和电子邮件地址.但现在他们想要归入一个单独的实体,拥有自己的名字和电子邮件.它们将被分配为单个组,而不是分配这三个单独的代表.系统还必须知道该组由这三个代表组成,用于报告目的.
甚至可以单独分配这些代表,但只要系统可以区分这三个是特定组的一部分.
我在一个拥有无限数量表的项目中,我们必须找到一个为平台带来可扩展性的解决方案,而我们似乎并没有弄清楚什么是非常好的.
该平台是求职者,因此它有两个明确的部分,候选人和公司.
我们一直在思考并找到那些可行的解决方案来重新构建当前的数据库,因为它是一个怪物.
现在我更加关注1 API 1数据库解决方案,但我们希望阅读一些有经验的用户做出最终选择.
谢谢!
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) 我正在尝试构建一个连接到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) database-design ×10
database ×4
mysql ×4
firebase ×2
api ×1
architecture ×1
django ×1
json ×1
nosql ×1
oracle ×1
php ×1
postgresql ×1
python ×1
sql ×1