问题标签 [normalization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mysql - 简单的 MySQL 数据库问题
我对数据库很陌生,我有一个快速的问题。
如果我有这些字段,我将如何设计我的 MySQL 数据库:
ID, lat, long, date - 多个日期,时间 - 多次
我知道我应该把它放在两张桌子上,对吧?那两张桌子看起来怎么样?
谢谢!
mysql - MySQL 架构:空列与连接
我有一个应用程序,我将在其中重复事件。因此,一个事件可以按天、“每 n 天”、“按周”、“每 n 周的 Mon/Tue/Wed/etc”和“按月”、“每 n 个月的 1 日、2 日、3 日等”重复。
从表格设计的角度来看,处理这个问题的最佳方法是什么?我可以想到两种方法,但我不确定哪一种更好。
1) 5 列用于上述情况,1 列用于日情况,2 列用于周和月。无论哪个未被使用,都将为空。在我的应用程序中,我可以看到空值并选择忽略它们。
2)有第二个表,比如 events_dateinfo 或其他东西,我会加入查询。
似乎选项 2 可能更“规范化”,什么不是,但是对于这样一个简单的事情,它会让你觉得过分吗?此外,如果我选择选项 2,是否有办法将行转换为列 - 即,为特定事件选择 2 周属性并将它们视为列?
database - 规范一个人的名字是否太过分了?
您通常对数据库进行规范化以避免数据冗余。在充满名称的表中很容易看出存在大量冗余。如果你的目标是创建一个地球上每个人的名字目录(祝你好运),我可以看到标准化名字是多么有益。但在普通业务数据库的背景下,这是否矫枉过正?
(当然我知道你可以把任何事情做到极致……比如说,如果你归一化为音节……甚至是相邻的字符对。我看不出走那么远有什么好处)
更新:
一个可能的理由是随机名称生成器。这就是我能想到的。
database - 数据库设计草图
任何人现在什么是数据库的设计草案???是否是设计过程和步骤,例如:
- 确定数据库的用途
- 查找并整理所需信息
- 将信息分成表格
- 将信息项变成列
- 指定主键
- 设置表关系
- 完善您的设计
- 应用规范化规则
或者是别的什么???谢谢
database - 如何说服某人规范化数据库?
所以我一直在从事这个项目,我正在编写一个与我无法控制的数据库交互的 php 网站。该数据库是由一位在公司工作多年的同事“设计”的;所以最终决定留给他们决定。
当我第一次参与这个项目时,我去找同事并解释说数据库模式似乎有缺陷。我解释了规范化数据库以确保数据完整性问题、节省磁盘空间以及使程序员(我)的工作更轻松的重要性。我什至给出了当前设计中如何发生插入、删除和更新异常的示例。尽管如此,这位同事向我解释说,他们不想让项目的数据库过于复杂,而且它不会改变周期。
因此,现在我已经进入该项目几个月了,每次我必须加入两个表以在彼此具有一对一关系的属性中插入一个值时,我都会把头发拉出来。(所以属性应该只是主关系的一个属性。)数据库看起来很糟糕,而且我担心几年后这会再次出现在我身上,因为我编写了使用数据库的前端。
有人对如何说服“高级”同事正确设计数据库有任何建议吗?或者关于如何避免在我没有任何参与的设计的道路上获得光顾多年的任何建议?我应该拒绝在未来从事这样的项目吗?在我的代码中留下评论说数据库不是我做的?
谢谢。
编辑:回应评论的附加信息......
我知道数据库的非规范化对于提高速度很有用,所以我不会忽视这一点。对于那些没有听说过这种策略的读者,我将举例说明。数据库设计者通常有一个地址关系,列出了用户的街道、城市、州和邮政编码。虽然每个人都知道邮政编码决定了城市和州,因此构成了一个将邮政编码索引到城市和州的表。通常,数据库设计人员会将这两个表组合在一起,并预见到对用户地址的每个查询都需要从地址表到 zip 表的连接,从而对它们进行非规范化。这最终加快了查询过程,并且是对数据库设计部分进行非规范化的合理推理。
在这里填写一些细节,该数据库是为旅游请求系统设计的,因此其中的数据与访客信息、日期等有关。当前数据库使用的模式从头到尾都是不可预测的。从变量命名模式中最简单的不一致(例如:num_of_visitors、arrivalMethod 等)到为单个状态的一对一属性定义单独的关系。示例:statusID 表示游览请求的状态,它只能从一组可能的状态(已批准、拒绝、待定、取消)中选择一个有效状态。由于某种原因,数据库有一个状态表,其中包含:tour_id(Primary旅游关系的关键),状态ID。这允许为每个游览请求定义多个状态。根据设计,旅游请求在任何给定时间都应该只处于一种状态。
database - 合并来自不同表的列的数据设计问题
我有 2 个表:成员表和邮件列表表。
- 水果列是用户偏好。
和
- mailinglist'er 可以选择接收时事通讯,但不一定是会员
我想开始存储邮件列表的首选项。我的问题是合并这两个表数据的最佳方法是什么?
我已经尝试使用仅存储用户名、密码等成员信息的成员表和存储电子邮件地址和首选项的单独配置文件表。成员和邮件列表首选项都可以存储在此配置文件表中,但我无法添加 FK 约束,因为我无法添加邮件列表。
所以现在我的选择是:
- 坚持使用 2 个表,但在邮件列表表上引入重复的“首选项”列。
- 使用单一配置文件表和螺钉参照完整性。
或者也许还有另一种更好的方法?
database - 为日历应用程序布置数据库模式
我想写一个日历应用程序。确实是反复出现的项目对 DB 模式的工作造成了影响。我很想就如何组织这个问题提供一些意见。
如果用户创建一个事件,并输入它在星期一每个人都重复,永远?我如何将所有这些存储在数据库中?我无法创建无限事件。我是否只是在其中放置一个包含相关信息的表格,以便我可以计算所有事件的去向?如果是这样,每次用户查看日历的新部分时,我都必须计算它们。如果他们浏览了几个月,但他们有大量的经常性项目怎么办?
此外,当用户单击一个项目并说“编辑序列中的这个”时,模式需要处理,而不是序列中的所有项目。然后我是否将一个项目从序列中拆分出来?
更新 1
我根本没有看过 iCal。需要明确的是,我认为保存允许您计算重复项目的信息,并拆分任何与序列不同的信息是存储它以便能够传输它的好方法。但我认为在应用程序中,这太慢了,无法在所有地方进行日期数学运算。
sql - 我应该如何保持汇总多个表的准确记录?
我有一个规范化的数据库,需要经常生成基于 Web 的报告,其中涉及跨多个表的连接。这些查询花费的时间太长,所以我想保持计算结果,以便我可以快速加载页面。我正在总结的表格经常更新,我需要总结来反映迄今为止的所有更新。
所有表都有自动增量主整数键,我几乎总是添加新行,并且可以安排在它们发生变化时清除计算结果。
我遇到了一个类似的问题,我需要通过安排迭代表中的每一行来对单个表进行摘要,并跟踪迭代器状态和所见的最高主要敏锐度(即“高水位”)。这对于一张桌子来说很好,但对于多张桌子,我最终会为每张桌子保留一个高水位值,这感觉很复杂。或者,我可以非规范化到一个表(具有相当广泛的应用程序更改),这感觉是倒退了一步,并且可能会将我的数据库大小从大约 5GB 更改为大约 20GB。
(我目前正在使用 sqlite3,但 MySQL 也是一种选择)。
database-design - 尝试确定特定的数据库规范化问题
一位同事将新表的值勾画为:
这些是表中唯一的列。列名是 Col1、Col2。
一个人说这个表没有标准化,另一个人说它是。
它违反规范化的具体论点是,删除 Col1 "Foo" 中带有 "Foo" 的三个记录将不再存在于系统中。那个人说应该有一个包含 ID 和名称列的查找表。上表将引用该表的 Id 作为其 FK。
它没有被规范化的论点是表中没有第三列依赖于第一列(第三规范化形式)。
我认为混淆来自它是 1NF,因为它满足这个例子:
来自http://en.wikipedia.org/wiki/Database_normalization。
但这听起来好像违反了这个规则,“相同的信息可以在多行上表达;因此对表的更新可能会导致逻辑不一致。” 这适用于超过 1NF 的归一化。
所以看起来原始表会违反 2NF,从而违反 3NF,但会满足 1NF。它是否正确?
mp3 - 计算 mp3 平均音量
我需要知道 mp3 文件的平均音量,以便当我将其转换为 mp3(以不同的比特率)时,我也可以缩放音量,使其正常化......
因此,我需要一个命令行工具/ruby 库,它可以为我提供以 dB 为单位的平均音量。