- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
因此,我正在努力思考整个“规范化”的问题。为了更好地理解它,我想出了一个存储歌曲的案例
假设我有以下数据库:
专辑表:
album_name| genre
album_1| genre_1, genre_2
album_2| genre_1
album_3| genre_2
为了归一化,我想到了下面的做法
专辑表:
album_name| genre_id
album_1| 3
album_2| 1
album_3| 2
类型表:
genre_id| genre_1| genre_2
0| false| false
1| true| false
2| false| true
3| true| true
因此,如果出现新的流派,我需要做的就是在流派表中创建一个新列,并分配新的相应genre_id
。好吧,这将需要填写所有可能的组合,但对于引入的每个新类型,这种情况只会发生一次。
Also, what I thought of, will that be considered "normalizing"? From the examples I have seen around, I haven't seen creation of tables with columns that were originally data.
最佳答案
执行此操作的规范方法是使用三个 表:
Album |
album_id | album_name (and maybe other columns)
1 | Rumours
2 | Thriller
3 | To the Moon and Back
Genre
genre_id | genre_name (also maybe other columns)
1 | rock
2 | pop
3 | alternative
AlbumGenre
album_id | genre_id
1 | 1
1 | 2
2 | 2
3 | 2
3 | 3
规范化就是避免存储重复数据。如果您仔细研究这个设计,您会发现关于专辑和流派的信息只存储一次,在每个相应的表中。然后,AlbumGenre
表存储专辑和各种流派之间的关系。该表通常称为“桥梁”表,因为它将专辑与其流派联系起来。
您建议的 Genre
表的问题在于它会重复有关关系的信息,即使这些关系不存在也是如此。此外,如果您需要向数据库添加更多类型,这种方法根本无法很好地扩展。
关于database - DBMS - 数据库中的音乐流派规范化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49714253/
是否有一个java库能够将数据库从任何DBMS(Mysql,SQLServer,Oracle,SQLite,...)导出到任何DBMS? 最佳答案 这并不容易..但您可以尝试使用 apache tor
我正在寻找令人满意的选项来对我的 .NET DAL 类进行单元测试;由于它们是 DAL 类,因此它们直接使用 ADO.NET 访问数据库。目前,我使用 MSSQL 数据库的实例进行测试,但想知道有哪些
假设我有以下关系(表): 学生(身份证、姓名、家庭) 类(class)(id、标题、单位、引用) Std-Course (std-id, course-id)//std-id 和 course-id
假设我有一个表 Table1,其中包含属性 id、姓名、地址、薪水。现在,我编写以下查询: SELECT * FROM Table1 WHERE 2*Salary > (SELECT MAX(Sala
我们正在为场馆开发支付系统。现在我们正在考虑为我们的应用程序使用什么 DBMS。目前我们正在使用微软的 sql express 来存储我们的数据。但是因为该系统将在非常繁忙的场所使用,我们认为我们需要
接受这个查询: SELECT * FROM MyTable WHERE MyColumn = 'SomeValue' ORDER BY SomeFakeQualifier.MyCol
我需要一个 DBMS,但不知道该选择哪个。基本上,应用程序进行许多 INSERT/UPDATE,但也进行许多 SELECT。 SELECT 大多非常简单,只有一个字段。 我目前正在使用 MySQL +
这里有人可以澄清“DBMS”和“数据库服务器”之间的区别吗?还有,'MySQL'是数据库查询语言的名称还是DBMS的名称? 最佳答案 DBMS 代表数据库管理系统(参见维基百科 http://en.w
我们知道: A schedule in which transactions are aligned in such a way that one transaction is executed fi
我刚刚阅读了 DBMS 中 3NF 的定义,它指出: 函数依赖 X --> A 是允许的,如果:1. X 是 super 键。2. A 是某个键的一部分。 我有两个疑问: a:我不明白第二个条件对消除
几年来,我一直沉浸在 MsSql/MySql 的世界里,我决定再展翅飞翔。目前,我正在研究哪种 DBMS 擅长归档数据时所需的事情。例如。大量写入和低读取。 我已经看到了 NoSQL 运动,但我有一个
好的..我已经对此进行了研究,但我对此研究得越多,我就越感到困惑。所以想到在这里发帖。 DBMS 提供数据库服务器功能 DBMS 有一个服务器组件和一个客户端组件 DBMS = 数据库服务器软件 DB
如果我们使用外部过程,我可以用其他语言执行一些代码,我想使用一些数值方法库来做一些矩阵计算并将结果存储在 SQL、Oracle 或任何 DBMS 中,这可能吗? 也许在 SQL 中有一个表,并告诉外部
Augmentation功能依赖性中的规则指出 当 X -> Y 时, 然后是 XZ->YZ。 有人可以举一个真实世界的例子吗? 最佳答案 如果 X 是客户 ID,Y 是客户姓名,Z 是出生日期,则:
我想知道哪些 DBMS 在其查询计划/执行中实际使用了多线程? 最佳答案 Oracle 支持这一点,SQL Server 和 DB2 也是如此。不过,我不认为 MySQL 或 PostgeSQL 支持
数据库管理系统(尤其是MySQL)对表的最大行数有限制吗? 我想创建用于保存日志文件的表,它的行数增加得如此之快,我想知道我应该怎么做才能防止出现任何问题。 最佳答案 我认为没有官方限制,这将取决于最
因此,我正在努力思考整个“规范化”的问题。为了更好地理解它,我想出了一个存储歌曲的案例 假设我有以下数据库: 专辑表: album_name| genre album_1|
DBMS 中的空值代表什么? 是未赋值还是不适用还是零还是空格? 最佳答案 Null 是 SQL 中用来表示数据库中不存在数据值的特殊标记。由关系数据库模型的创建者 E. F. Codd 引入,SQL
DBMS 如何利用撤消缓冲区和重做日志文件来恢复对数据库所做的更改? 最佳答案 例如在 Oracle 上,重做日志文件记录由于事务和内部 Oracle 服务器操作而对数据库所做的更改。并且这些文件保护
是否有任何开源分层数据库或现有 RDBMS 之上的仿真? 我正在搜索一个 DMBS(或现有 RDBMS 的插件),它可以存储分层数据并允许对分层数据执行查询(类似于“SELECT LEVEL ...
我是一名优秀的程序员,十分优秀!