我有以下表格:
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
目前的情况
我有一个桌面应用程序(C++ Win32),我希望匿名跟踪用户的使用情况分析(操作,点击,使用时间等)
.跟踪是通过指定的Web服务完成的,用于特定的操作(安装,卸载,点击) )所有内容都由我的团队编写并存储在我们的数据库中.
需求
现在我们用各种数据添加更多使用类型和事件,因此我们需要定义服务.
我希望为所有使用类型提供单一的通用服务,而不是为每个操作提供大量不同的Web服务,这些服务能够接收不同的数据类型.
例如:
问题
我正在寻找一种优雅便捷的方式来存储这种不同的数据,以后我可以轻松地查询它.
我能想到的替代方案:
将每种使用类型的不同数据存储为JSON/XML对象的一个字段,但是为这些字段提取数据和编写查询将非常困难
为每条记录提供额外的N个数据字段,但这似乎非常浪费.
对这种模型有什么想法吗?也许像谷歌分析?请指教...
技术: DB是在phpMyAdmin下运行的MySQL.
免责声明: 有一个类似的帖子,它引起我的注意服务,如DeskMetrics和Tracker鸟,或尝试将谷歌分析嵌入到C++本机应用程序,但我宁愿自己的服务,更好地了解如何设计这个有点模型.
谢谢!
mysql database analytics desktop-application database-normalization
我正在研究一个示例问题,其中我们试图确定以下哪个关系处于第三范式(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规则之一,那将非常有帮助:
对于R1,我采取的第一步是将其分解为闭包:
ACD + = …
问题: 我遇到的问题是在选择模型中获得选项的价格.这是因为,根据哪些其他选项也在同一购物车中,将使用不同的价格来生成总数.我需要一个查询集的帮助,它可以获得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
我是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) 假设你有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
我即将启动一个数据库设计,它将简单地管理公司下的用户.
我的主要问题是
我应该根据公司创建表格吗?喜欢
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.
我正在尝试为豪华轿车公司建立数据库,但我对与客户,司机,关联公司和订单相关的地址应该做多少标准化工作感到困惑。
会员和司机的地址基本上是这样的: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
这些只是示例,因此无需花费大量时间来理解它们。
我应该使用多少个地址表来创建一个良好的规范化数据库?
在这一刻,我有三个想法:
一个包含所有字段的地址表,外加一个描述地址类型(客户,订单,会员,驱动程序)的表。不太喜欢这个。
两个地址表。一个与司机和关联公司,另一个与客户和订单。对于第二个表,我将拥有and字段,对于客户而言,该字段始终为NULL。也不喜欢这个。
三个地址表。一种用于驾驶员和会员,一种用于客户,一种用于订单。没有未使用的字段使我认为这可能是比其他两个更好的选择。
有没有人对这三个选择有更好的建议?
非常感谢。
更新:
不用担心表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的字段或也可以用于字段)。
我也不喜欢这个选项,因为我将需要执行两个查询才能只检索订单记录的信息。首先,我将检索订单信息,在知道了接送服务的类型(机场或地址)之后,我将执行另一个查询以检索特定的接送服务。
所以,再次...我在做什么错?我想念什么吗?
是的,我一定会使用一些验证系统来确保地址正确。
根据维基百科示例,以下示例不是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吗?
为了理解什么是第二范式,我正在阅读一些文章,还有一些我不理解的东西.
在文章这里
的客户表它说,它不是在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.
有人可以帮助我更好地理解规范化背后的理论