Questions tagged «relational-theory»

在此站点上,此标签适用于有关关系模型理论的问题。数据库管理的关系模型是一种使用与一阶谓词逻辑一致的结构和语言来管理数据的方法。在数据库的关系模型中,所有数据均以元组表示,并分组为关系。根据关系模型组织的数据库是关系数据库。

2
我可以无损地分解这张桌子吗?
我偶然发现了一个数据库设计问题,而这个数据库设计问题超出了我的能力范围,而我的DBA专家也开始进行防火训练。 本质上,我有一个带有以下主键的表(为简洁起见,PK): child_id integer parent_id integer date datetime child_id并且parent_id是实体表的外键。“子”表本身还包含“父”表的外键,并且lo child_id始终引用与parent_id上表所期望的相同的外键。实际上,事实证明,还有一些额外的代码可以使两者保持同步。 这使这位热情洋溢的标准化新手说:“我应该删除冗余!” 我分解为以下内容: Table_1 PK: child_id integer date datetime Table_2 PK: parent_id integer date datetime Table_3: (already exists) child_id integer PRIMARY KEY parent_id integer FOREIGN KEY 而且,当我自然地将这些人加入一起时,我将恢复原始表。据我了解,制造出了5NF。 但是,现在我意识到存在隐藏的业务规则。 通常,与给定日期关联的日期child_id必须是与对应日期关联的日期的子集parent_id。您可以看到第一个表强制执行此规则。 我的分解不会强制执行该规则,因为您可以自由地将其添加到表1中,直到日期变得太大为止。 这将我引向以下问题: 这是5NF分解吗?虽然我说它允许插入异常,但它似乎也遵循Wiki示例,该示例本身遵循本指南。短语(强调我)“我们可以从由三种不同的记录类型组成的规范化形式中重构所有真实事实”,这给了我一个特殊的停顿,因为无论我注入多少垃圾Table_1,自然连接仍然会忽略它。 假设我不喜欢这种分解(我不喜欢)。我自由地承认,实际的解决方案是保留表和代码不变。但是,从理论上讲,是否有一种方法可以分解和/或添加约束,以使我摆脱第一个表并保留我的业务规则?

2
没有主键的表是否被标准化?
在一次演讲中,我的讲师向我们展示了一个没有主键的桌子。在询问时,他说在3NF中,当您删除传递依赖项时,可以有一个没有主键的表。 但是,没有主键意味着没有功能依赖关系-但是3NF消除了传递依赖关系,并且我被告知每个表都需要有一个用于规范化的主键,因为它全都与功能依赖关系有关。 我知道完全可以创建没有主键的表,但是如果该表存在,该数据库是否被视为规范化的? 我应该补充一点,该表没有任何“唯一键”,没有主键,没有复合键,没有外键。 所显示的表具有三个属性,没有一个被标记为主要或唯一。我问这是否是一个错误,他说没有一个是很好。我质疑此评论,因为表中的任何信息都无法唯一标识,他声称可以这样。这违背了我关于标准化的知识。

4
第一个范式:确定性定义
我试图得到什么是第一范式的确定版本。我阅读的所有内容都有一个稍微不同的旋转。 许多机构(例如Date)说,根据定义,关系始终是“第一范式”,而其他机构则列出了要求列表。这意味着对1NF的需求从零到很多。 我猜想区别在于表和关系之间的关系:表可能是一个完整的混乱,而关系则受到某些限制。关系在SQL中表示为表的事实因此造成了一些混乱。 我特别关注与SQL数据库有关的1NF。问题是:要确保表格采用第一范式需要哪些属性? 许多权威人士建议,如果表表示一个关系,则该表已经存在于1NF中。这将1NF的定义推回到关系的定义。 以下是1NF中表格的一些属性: 列顺序微不足道[1] 行顺序微不足道 所有行的长度相同(即,行数据与列标题匹配) 没有重复的行(可以使用代理主键来保证,但是PK本身不是必需的) 没有重复的列 每一列包含一个单一值(原子) [1]从技术上讲,属性是无序的,但是在表中,行数据的顺序必须与列标题的顺序相同。但是,实际顺序并不重要。 在多个数据上: 原子数据的概念是不能进一步分解项目。此概念已经过资格验证,尽管从技术上讲,所有内容都可以细分为恶心,但实际上,取决于所使用的数据的方式,所讨论的数据无法进一步细分。 例如,完整的地址或全名通常应进一步细分,但是诸如给定名称或城镇名称之类的组件可能不应进一步细分,尽管事实上它们可以是字符串。 至于重复的列,它是一个设计不良列具有近重复列,例如phone1,phone2等。通常,重复数据指示用于一个附加的相关表的需要。 依存关系 行之间不应有任何关系,除非它们符合相同的标题。 列之间也应该没有关系,但是我认为这是较高范式的主题。 问题是:上面的多少在1NF的定义中?独立行位也进入其中吗?

1
设计一个友谊数据库结构:我应该使用多值列吗?
假设我有一个名为的表User_FriendList,它具有以下特征: CREATE TABLE User_FriendList ( ID ..., User_ID..., FriendList_IDs..., CONSTRAINT User_Friendlist_PK PRIMARY KEY (ID) ); 让我们假设该表包含以下数据: + ---- + --------- + --------------------------- + | ID | 用户名 | Friendlist_IDs | + ---- + --------- + --------------------------- + | 1 | 102 | 2:15:66:35:26:17:| + ---- + --------- + --------------------------- + …

3
Yelp如何有效地计算数据库中的距离?
例如,说我有一张桌子: Business(BusinessID, Lattitude, Longitude) 所有这些都被索引了。也有一百万条记录 假设我想寻找最接近106.5的企业,该怎么办? 如果我做 SELECT * FROM Business WHERE (Some formula to compute distance here) < 2000 例如,或者如果我这样做 SELECT * FROM Business TOP 20 理论上,计算机将必须计算所有biz的距离,而实际上,只有那些纬度和经度在一定范围内的距离才应计算。 那么,如何在PhP或SQL中做我想做的事情? 到目前为止,我很感谢您的回答。我正在使用mysql,它们没有比明显的解决方案更有效的方法。MySQL空间也没有计算距离功能。

3
如果带有代理键的表的列已知具有唯一的非空值(例如SSN),是否违反3NF?
据我了解,第三范式(3NF)基本上意味着应该只有一个密钥。 如果带有自动递增id列的表还具有一个已知唯一且不为空的列(例如,社会保险号),则该另一列可用作键。 从严格的架构设计方面,忽略实际/业务问题(例如,将SSN作为密钥/ FK传递时的安全性/隐私风险),由于有效地有2个密钥,这样的表是否不会出现在3NF中? 答案是否会在另一列上是否有唯一键上有所不同?如果是这样,为什么?

2
此数据的最佳关系数据库结构
我正在为以下情况创建数据库方案: 有用户 用户具有角色(例如“开发人员”或“ CEO”) 角色具有应用程序(例如“ Topdesk”) 应用程序具有权限(例如“更新知识库”) 如果角色已经可以访问应用程序,则该角色可以具有权限 假设没有高性能环境(无需针对速度进行优化),那么实现此架构的最佳方法是什么?数据库环境可以是MySQL,MSSQL ...更多是关于关系数据库的设计。 我本人提出以下建议: 我最不确定的部分当然是Applications_Permissions_Roles表。它是另一个链接表之上的链接表。我以前从未使用过或看过。做到这一点的另一种方法是将其替换为“角色”和“权限”之间的链接表,然后使用代码或约束来确保所需的关系...但这对我来说似乎不是一个好的解决方案。这些事情应该在数据库级别(如果可能)上强制执行,而不是在代码级别上强制执行。 其次,是否需要Permissions.Application和Applications.Id之间的链接?我之所以使用它,是因为Roles_Applications中可能没有任何行(例如,当您刚刚添加了新应用程序时),因此无法确定哪些权限属于哪个应用程序。它也是查阅权限所属于的应用程序的单一参考点。我想这是对的,但它在数据库设计中也有影响。尝试将ON_DELETE或ON_UPDATE设置为级联时,会出现MSSQL错误。 有什么建议,或者这是应该怎么做的?也欢迎任何其他有关命名约定的建议(例如作为评论)。 谢谢, 卢克 编辑:更改标题,希望使其更清晰。前一个比较全面,但可能太复杂了。

1
MySQL中的朋友关系
我正在MySQL中建立一种友谊关系,其中的朋友关系是相互的。如果A是B的朋友,则B是A的朋友。如果用户之一结束友谊,则关系下降。我想学习哪种方法更好。 我有一个正在运行的系统; user ----------- userid p.k name friends ------- userid friendid primary key (`userid`,`friendid`), key `friendid` (`friendid`) 1 2 2 5 1 3 To get all of my friends; SELECT u.name, f.friendid , IF(f.userid = $userid, f.friendid, f.userid) friendid FROM friends f inner join user u ON ( u.userid = …

2
单位和复杂单位转换的良好关系结构是什么?
我的公司从事能源行业,我需要想出一种很好的方法来表示计量单位的转换。我已经进行了一些搜索,但还没有找到需要的深度方面的好文章。大多数有关单位转换的信息都假定给定的单位1有一个已知的(硬编码)转换率可以到达单位2,并且它是简单的数学运算(这是我发现的最复杂的示例,仍然没有用)。但是,在现实世界中并非总是如此,对于我们必须处理的事情当然也不是正确的。(很抱歉写了很长时间-我正尝试提供尽可能多的信息!) 棘手的示例1: 某些转换会随时间而变化,例如将$ 5转换为Euros,反之亦然。听起来这与能源无关,但实际上在能源商品市场(想想股票市场)中。 棘手的例子2 :(过于 简单化)某些天然气燃烧得比另一些更热。另外,可以根据气体中的能量(例如Therms)或基于该气体的体积(例如1000立方英尺的MCF)来测量/存储天然气,还有其他可能性(例如作为吨用于质谱)。汽油的一个例子是1加仑的93辛烷无铅汽油比1加仑的93辛烷无铅汽油少。 棘手的示例3: 除了拥有这些度量单位之外,我们还经常需要处理费率,例如$ / Therm或$ / MCF。因此,我们需要某种方式来处理这些费率以及它们与基本单位的关系,因此,如果我们需要从$ / Therm转换为€/ MCF,我们可以并且它使用与从Therm转换为MCF相同的发布费率。 棘手的示例4: 以前,我曾经非常宽松地使用“ 能量 ”一词,有时可能会错误地使用它。从现在开始,这种情况正在改变。所以最后一个曲线球是我们既要处理能源又要处理电源。对于电力,这意味着kWH与kW(尽管是Yahoo Answers,这是一个相当不错的解释)。数据比喻:这就像将下载的总MB数据与Mbps进行比较ISP为您提供的带宽。像数据一样,能量也需要时间来传递。继续进行数据类比,我们可能必须计算一段时间内消耗的平均有效带宽,因此,假设在1分钟内下载了60MB,则“有效”速率将为60 * 8/60 = 8Mbps。这里的“窍门”是,如果我们将Mbps本身存储为一个单位,那么即使它也涉及时间成分,我们也需要某种方法将其直接与MB相关联。幸运的是,从能源到电力的转换(反之亦然)对我们来说是一件非常罕见的事情,因此我们的解决方案应针对所有其他棘手的示例进行优化,并希望也允许这个示例,但不要处理相关的问题。能源到电源是一种选择。 整蛊例如5: 这主要是3 + 4,我们可以同时拥有每千瓦$和$每千瓦时,所以利率同时面对电力和能源。 举个简单的例子: 有些转换非常容易,而这些转换是网络上大多数信息都可以处理的。1000 Wh = 1kWh等。与Therms和Decatherms或kW到MW等相同。在这里我不需要帮助,但请记住,我们约有70%的转换属于此类。 我对如何开始但不确定如何完成的想法: 这显然很混乱,因此我建议我们选择一个标准的度量单位来存储每种商品和“使用类型”的所有数据。因此,对于电力,我们的标准能源单位为kWH,我们的标准动力单位为kW。因此,要转换为任何其他能源/功率单位,我们仅需要与标准之间的转换率,而不是每种可能的组合。如果我们需要将MW转换为W,我们总是可以通过将其转换为kW来实现。 由于转换率可能取决于特定时间,因此我们必须允许存储与测量相关的时间。我怀疑我们不必担心这些转换率的变化快于每小时一次,甚至可以假设每天一次。 由于转换率可能取决于发布的值,因此我们必须允许该值相对于度量存储的能力。我怀疑我们不必担心这些转换率的变化快于每小时一次,甚至可以假设每天一次。 解决所有这些问题之后,我期望创建一个仅处理所有单位转换的Web服务。我不是要执行这些转换的SQL,而是可以做一些创造性的缓存,因此我并不是绝对要锤击这些表,但是有时它需要处理用户访问的网站中每页面加载约400个值的转换。我不确定这是否/如何重要。 我不知道应该在什么级别存储从未更改过的转换率与确实发生更改的转换率,以及如何以一种易于使用的方式快速访问这些转换率的方法,一起工作。 关于如何解决这个问题,甚至某些出版的阅读材料可能有帮助的想法?我正在使用SQL Server(即将成为SQL Azure),但这并不重要。正确表示这一点的模式就是我在这里遇到的问题。如果它像英寸和厘米一样简单,那很容易。但是这里存在转换率变化的问题。

3
“逻辑差异”的定义?
我目前正在阅读CJ Date撰写的“ SQL和关系理论”。尽管我在书中走的很远,但我有一些基本问题。我想知道“逻辑差异”一词的含义,这本书确实尝试通过示例来解释该术语,但并没有真正解释它的含义(或者也许我理解错了??) 这是本书的一小部分: 我已经说过,关系和关系图片之间存在逻辑上的区别。逻辑差异的概念源自维特根斯坦的格言: 所有逻辑上的差异都是很大的差异。 我知道直觉上的逻辑差异是什么,我知道关系和关系图片之间的差异。我想要的是“逻辑差异”概念的形式化定义,因此我对它的含义有一个很好的了解。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.