标签: database-normalization

设计 - 第六范式

我有以下表格:

Blogs { BlogName }
BlogPosts { BlogName, PostTitle }
Run Code Online (Sandbox Code Playgroud)

根据6nf(根据第三个宣言),博客帖子同时对实体和关系建模是无效的.

在6nf中,它将是:

Blogs { BlogName }
Posts { PostTitle }
BlogPosts { BlogName, PostTitle}
Run Code Online (Sandbox Code Playgroud)

如果我想通过序列nbr(仅作为示例)订购博客帖子,那将是另一个表

BlogPostsSorting { BlogName, PostTitle , SortOrder }
Run Code Online (Sandbox Code Playgroud)

我说得对吗?

sql normalization relational-database database-normalization 6nf

6
推荐指数
2
解决办法
1089
查看次数

定义用户分析的Web服务(dekstop应用程序)

目前的情况
我有一个桌面应用程序(C++ Win32),我希望匿名跟踪用户的使用情况分析(操作,点击,使用时间等)
.跟踪是通过指定的Web服务完成的,用于特定的操作(安装,卸载,点击) )所有内容都由我的团队编写并存储在我们的数据库中.

需求
现在我们用各种数据添加更多使用类型和事件,因此我们需要定义服务.
我希望为所有使用类型提供单一的通用服务,而不是为每个操作提供大量不同的Web服务,这些服务能够接收不同的数据类型.
例如:

  • "button_A_click"事件,包含1个字段的数据:{window_name(string)}
  • "show_notification"事件,包含3个字段的数据:{source_id(int),user_action(int),index(int)}

问题
我正在寻找一种优雅便捷的方式来存储这种不同的数据,以后我可以轻松地查询它.
我能想到的替代方案:

  • 将每种使用类型的不同数据存储为JSON/XML对象的一个​​字段,但是为这些字段提取数据和编写查询将非常困难

  • 为每条记录提供额外的N个数据字段,但这似乎非常浪费.

对这种模型有什么想法吗?也许像谷歌分析?请指教...

技术: DB是在phpMyAdmin下运行的MySQL.

免责声明: 有一个类似的帖子,它引起我的注意服务,如DeskMetricsTracker鸟,或尝试将谷歌分析嵌入到C++本机应用程序,但我宁愿自己的服务,更好地了解如何设计这个有点模型.

谢谢!

mysql database analytics desktop-application database-normalization

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

了解3NF:请说明文

我正在研究一个示例问题,其中我们试图确定以下哪个关系处于第三范式(3NF).以下是我们给出的关系:

R1(ABCD)
ACD - > B AC - > D D - > C AC - > B.

R2(ABCD)
AB - > C ABD - > C ABC - > D AC - > D.

R3(ABCD)
C - > B A - > B CD - > A BCD - > A.

R4(ABCD)
C - > B B - > A AC - > D AC - > B.

我知道答案是R1在3NF,但我很难理解确定违反3NF的步骤.对于每个关系,有人可以用简单的英语分解吗?如果您能够告诉我每个关系如何违反3NF规则之一,那将非常有帮助:

  1. X - > A,则A是X的子集
  2. X是超级钥匙
  3. A是R的一些关键的一部分

对于R1,我采取的第一步是将其分解为闭包:

ACD + = …

database 3nf database-normalization

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

Django:检查查询集中是否存在对象(IF ELSE)

问题: 我遇到的问题是在选择模型中获得选项的价格.这是因为,根据哪些其他选项也在同一购物车中,将使用不同的价格来生成总数.我需要一个查询集的帮助,它可以获得Option的价格,如果该选项有一个effector_option,它本身在同一个购物车中,使用它,否则使用Variation只有选项字段集.

TempName App模型包括:

class Section(models.Model):
    title = models.CharField(max_length=20)
    description = models.CharField(max_length=100)
    temp = models.ForeignKey(TempName, null=False)
    def __str__(self):
        return self.title
    def get_options(self):
        return self.option_set.all()

class Option(models.Model):
    name = models.CharField(max_length=120)
    section = models.ForeignKey(Section, null=False)
    def __str__(self):
        return self.name
    def get_variations(self):
        return self.variation_set.all()

class Variation(models.Model):
    name = models.CharField(max_length=60, blank=True, unique=True)
    price = models.DecimalField(max_digits=5, decimal_places=2)
    option = models.ForeignKey(Option, null=False)
    effector_option = models.ForeignKey(Option, null=True, blank=True, related_name='option_effected')
    def __str__(self):
        return self.name
Run Code Online (Sandbox Code Playgroud)

一页上可以有很多章节.每个 …

django normalization django-models django-queryset database-normalization

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

为Cassandra数据库建模数据的最佳实践

我是Cassandra的新手,正在寻找有关如何建模具有以下通用结构的数据的最佳实践:

数据是基于"用户"的(每个客户),每个数据提供大约500K-2M条目的大数据文件(每天定期更新几次 - 有时完全更新,有时只有增量)

每个数据文件都有一些必需的数据字段(约20个必填项),但可以自行添加其他列(最多约100个).

附加的数据字段是NOT不一定用于不同用户(字段的名称或类型的那些字段的)相同的

示例(csv格式:)

user_id_1.csv

| column1 (unique key per user_id)  |  column2  |  column3 |   ...   |  column10  |  additionalColumn1  |  ...additionalColumn_n |
|-----------------------------------|-----------|----------|---------|------------|---------------------|------------------------|
| user_id_1_key_1                   |  value    |  value   |  value  |  value     |                ...  |  value                 |
| user_id_1_key_2                   |  ....     |  ....    |  ....   |  ....      |                ...  |  ...                   |
| ....                              |  ...      |  ...     |  ...    |  ...       |                ...  |  ...                   |
| user_id_1_key_2Million            | …
Run Code Online (Sandbox Code Playgroud)

database cql cassandra database-normalization scylla

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

是否有规范化列=行的表的快捷方式?

假设你有mySQL表描述你是否可以混合两种物质

Product   A    B    C
---------------------
A         y    n    y
B         n    y    y
C         y    y    y
Run Code Online (Sandbox Code Playgroud)

第一步就是改变它

P1   P2   ?
-----------
A    A    y
A    B    n
A    C    y
B    A    y
B    B    y
B    C    n
C    A    y
C    B    n
C    C    y
Run Code Online (Sandbox Code Playgroud)

但是你有重复的信息.(例如,如果A可以与B混合,那么B可以与A混合),因此,您可以删除多行来获取

P1   P2   ?
-----------
A    A    y
A    B    n
A    C    y
B    B    y
B    C    n
C    C    y
Run Code Online (Sandbox Code Playgroud)

虽然使用小桌子的最后一步非常简单,但手动操作会永远占用更大的桌子.如何使用重复的MEANING自动删除行,但不是相同的内容?

谢谢,我希望我的问题有意义,因为我还在学习数据库

mysql database performance database-normalization database-table

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

千行的最佳数据库设计是什么

我即将启动一个数据库设计,它将简单地管理公司下的用户.

  • 每家公司都有一个可以管理用户的管理区域
  • 每家公司将拥有约25.000名用户
  • 客户认为有大约50家公司开始

我的主要问题是

我应该根据公司创建表格吗?喜欢

users_company_0001 users_company_0002 users_company_0003 ...

因为每个公司永远不会使用"其他"用户,并且不需要在所有user_company中对不同的表进行求和/计数(一个简单的方法JOIN可以做到这一点,虽然它更昂贵(时间)它将起到主要图片的作用,这将永远不会被需要.

或者我应该创建一个users表(50 x 25000)1 250 000个用户(并且还在增长).

我正在考虑第一个选项,但是,我不确定如何在这样的布局上使用Entity Framework ...我可能需要回到90年代并手动生成我的数据逻辑层.

它是对包含公司标识的商店程序的简单调用

你会建议什么?

系统应用程序将是ASP.NET(可能是MVC,我仍然试图解决这个问题,因为我所有的知识都是关于webforms的,虽然我看到Scott Hanselman MVC视频 - 接缝很容易 - 但我知道它不会那么容易问题将来临,我将花费更多时间来修复它们,以及Microsoft SQL.

sql-server database-design database-normalization

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

地址的数据库规范化

我正在尝试为豪华轿车公司建立数据库,但我对与客户,司机,关联公司和订单相关的地址应该做多少标准化工作感到困惑。

会员和司机的地址基本上是这样的:address_line_1,address_line_2,城市,州,邮政编码,国家/地区

我的问题来自订单和客户地址。它们应如下所示:address_line_1,address_line_2,城市,州,邮政编码,国家/地区,address_type_1(家庭,企业),address_type_2(接送,送达-仅在订单中需要包含)。

因此,在所有四个表之间,除了两个字段在customer和orders表上不同之外,我在地址字段中具有相似之处。

我需要提及的是,每条记录都将使用唯一的ID进行标识。例:

客户编号-10,000-99,999

订单ID-100,000-无限制

驱动程序ID-A1-A999(可能)

会员编号-1,000-9,999

这些只是示例,因此无需花费大量时间来理解它们。

我应该使用多少个地址表来创建一个良好的规范化数据库?

在这一刻,我有三个想法:

  1. 一个包含所有字段的地址表,外加一个描述地址类型(客户,订单,会员,驱动程序)的表。不太喜欢这个。

  2. 两个地址表。一个与司机和关联公司,另一个与客户和订单。对于第二个表,我将拥有and字段,对于客户而言,该字段始终为NULL。也不喜欢这个。

  3. 三个地址表。一种用于驾驶员和会员,一种用于客户,一种用于订单。没有未使用的字段使我认为这可能是比其他两个更好的选择。

有没有人对这三个选择有更好的建议?

非常感谢。

更新:

不用担心表ID的编号系统。那只是一个例子。我仍然没有时间找出最好的编号系统。一旦我解决了地址问题,问题就会解决。

从马特的答案中,我很想让司机和会员表保留所包含的地址,然后以某种方式对客户表和订单表进行排序。

对于客户,我肯定需要一个Addresses表,因为客户可以将多个地址(家庭,公司1,公司2,喜欢的地方等)存储在他们的个人资料中,以便于访问。

我忘记提及订单表,这可能会改变问题的方程式。对于任何订单,我都需要有一个提货和提货地点。但这可以是地址(街道地址)或机场。这意味着与街道地址相关的字段不能与机场特定的字段匹配。因此,我非常确定,在一个表内(全部带有其特定字段)有四个实体(pu_address,pu_airpot,do_address,do_airport)会使我留在未使用的空间中,并且会造成编程混乱。例如:用于接送字段:Address_type,Address_line_1,...,州,国家/地区,机场,航空公司,Flt号,...,以及与接送相同的项目。

因此,我对Order表仍然有疑问,我不确定该如何前进。无论是否使用额外的表格,我都需要同时包括地址和机场上落地点。

更新 再次感谢马特。首先,是的,我将地址存储在单独的字段中。对于订单,问题仍然存在。我将举例说明什么类型的pu并使用豪华轿车服务。地址:伊利诺伊州芝加哥市Main Main 123号,邮编60640; 机场:ORD,AA,123。我需要将所有这些字段以某种方式集成到表格中。

选项:订购表

order_id,...,需要同时具有机场和地址字段的领取字段,具有机场和地址字段的下车字段。

此选项听起来仍然不正确。

接下来将有两个额外的表。一个用于地址(包括用于识别接送的区域)。另一个将用于机场(具有用于pu的字段或也可以用于字段)。

我也不喜欢这个选项,因为我将需要执行两个查询才能只检索订单记录的信息。首先,我将检索订单信息,在知道了接送服务的类型(机场或地址)之后,我将执行另一个查询以检索特定的接送服务。

所以,再次...我在做什么错?我想念什么吗?

是的,我一定会使用一些验证系统来确保地址正确。

database-design database-normalization street-address

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

2NF和BCNF之间的差异

根据维基百科示例,以下示例不是bcnf,因为存在重叠的候选键(名称和工作,以及名称和承包商)

Name   Work        Contractor
John   Plumber     Plumber industries
Ryan   Plumber     Plumber industries
Ryan   Elektrician Electro industries
Run Code Online (Sandbox Code Playgroud)

但是,这张表还不在2NF吗?考虑到Name和work组成主键,然后承包商只能从work中派生出来,那么数据库是否应该被拆分?

如果我的陈述是真的,有人可以为我提供一个(简单)数据库的例子,该数据库不是在BCNF中,而是2NF吗?

relational-database database-normalization

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

第2范式理解候选键

为了理解什么是第二范式,我正在阅读一些文章,还有一些我不理解的东西.

在文章这里客户表它说,它不是在2NF,因为there are several attributes which don’t completely rely on the entire Customer table primary key.这里的主键,我认为这意味着{客户ID,雇员}

在此输入图像描述

如果我们选择{customerId,employeeId}作为候选键,那么Customername,customerCity,PostalCode确实仅部分取决于候选键,因此不在2NF中.但是,如果我们认为候选键是customerId,那么Customer表中的所有列都完全依赖于customerId吗?(因为employeeId依赖于customerId).
此外,由于CustomerId可以是候选键,因此候选键不能包含另一个候选键作为候选键.{CustomerId,EmployeeId}可以作为候选键.

因此,如果我们单独将customerId作为候选键,那么这个表是不是以2NF格式表示的?
但是在文章中它说2NF形式的表应该有一个目的,这里这个客户表有两个目的.
To indicate which customers are called upon by each employee To identify customers and their locations.
然后我觉得这张桌子不在2NF.
那么这张表中的候选键是什么?

我的第二个问题是在这篇文章中

在此输入图像描述

这些表格在3NF.在TABLE_BOOK表中,候选键是bookId吗?我们不能选择{bookId,genereId}作为候选键对吗?如果选择这样,它就不会在2NF中,因为价格不依赖于genreId.

有人可以帮助我更好地理解规范化背后的理论

database normalization database-normalization candidate-key

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