Php 这是MySQL枚举数据类型的适当使用吗?

Php 这是MySQL枚举数据类型的适当使用吗?,php,mysql,enums,recordstore,Php,Mysql,Enums,Recordstore,我最近开始在空闲时间做自由职业者PHP+MySQL开发,以补充我全职工作的收入,我在那里写C#/SQL Server代码。我注意到的与数据库相关的一个重大差异是MySQL有一个enum数据类型,而SQLServer没有 当我注意到enum数据类型时,我立即决定扁平化我的数据模型,使用一个使用枚举的大表,而不是许多用于离散实体的小表和一个大的“桥”类表 我目前工作的网站是一个唱片公司。我只有一个表来存储标签的发布,“releases”表。我在任何地方都使用了枚举,我通常会使用外键来创建一个单独的表

我最近开始在空闲时间做自由职业者PHP+MySQL开发,以补充我全职工作的收入,我在那里写C#/SQL Server代码。我注意到的与数据库相关的一个重大差异是MySQL有一个enum数据类型,而SQLServer没有

当我注意到enum数据类型时,我立即决定扁平化我的数据模型,使用一个使用枚举的大表,而不是许多用于离散实体的小表和一个大的“桥”类表

我目前工作的网站是一个唱片公司。我只有一个表来存储标签的发布,“releases”表。我在任何地方都使用了枚举,我通常会使用外键来创建一个单独的表——艺术家名、标签名和其他几个。用户可以通过后端编辑这些枚举列。与使用文本字段相比,我看到的枚举的主要优势是艺术家名称将被重用,这将提高数据完整性。我还看到了在数据库中拥有较少表的优势

顺便说一句,我仍然有一个附加表和一个桥接表——有一个“标记”特性可以将标记添加到特定的发行版,由于这是一个多对多关系,我觉得一个离散的标记表和一个桥接表可以将标记连接到发行版是合适的


由于以前从未在数据库中遇到过ENUM数据类型,我想知道我是否明智地使用了此功能,或者是否存在我没有预见到的问题,这些问题可能会因为此数据体系结构而再次困扰我。有经验的MySQL用户,你觉得怎么样?

总之,这不是一个好的设计。外键是有用途的

发件人:

枚举最多可包含65535个元素

您的设计不允许存储超过65k个不同的艺术家名称

你有没有考虑过当你添加一个新的艺术家名字时会发生什么?我假设您正在运行一个
altertable
来添加新的枚举类型?根据与此相比,只需将另一行添加到
artist
表中即可

如果有多个表需要引用艺术家/艺术家的姓名,会发生什么情况?如何跨表重用枚举值


这种方法还有许多其他问题。我认为这样简化数据库设计会给您带来真正的伤害(外键或具有多个表不是坏事!)。

简而言之,这不是一个好的设计。外键是有用途的

发件人:

枚举最多可包含65535个元素

您的设计不允许存储超过65k个不同的艺术家名称

你有没有考虑过当你添加一个新的艺术家名字时会发生什么?我假设您正在运行一个
altertable
来添加新的枚举类型?根据与此相比,只需将另一行添加到
artist
表中即可

如果有多个表需要引用艺术家/艺术家的姓名,会发生什么情况?如何跨表重用枚举值


这种方法还有许多其他问题。我认为,像这样简化数据库设计会给您带来真正的伤害(外键或具有多个表不是坏事!)。

老实说,我在阅读

我在任何地方都使用了枚举法 通常将外键用于 单独的表格--艺术家姓名、标签 名字,还有其他几个

如果我理解正确的话,这意味着有一个所有艺术家的枚举。但艺术家的数量肯定会有变化:会有更多的艺术家。我真诚地怀疑唱片公司从未计划增加或改变艺人名单;)

因此,在我看来,这是对枚举的错误使用

我也不认为执行
altertable
是合适的,因为这不可避免地是一个相当平凡的用例。(创建/阅读/更新/销毁艺术家)我没有数字来支持这个观点

您必须将其视为一个问题,即什么信息是实体或实体的属性:对于唱片标签,艺术家是实体,但媒体类型可能不是。艺术家拥有大量与他们相关的信息(姓名、流派、奖项、网站url、资历等),这表明他们是一个实体,而不是另一个实体(如发行版)的属性。此外,艺术家作为he系统日常使用的一部分被创建/阅读/更新和销毁,进一步表明他们是实体


实体往往有自己的表。现在,当您查看这些发行版的媒体类型时,您必须问问自己媒体类型是否有任何其他信息。。。如果它不仅仅是一个名字,那么你就有了一个新的实体。例如,如果您的系统必须跟踪某个媒体类型是否已过时,则该媒体类型现在有两个属性(名称,已过时),并且应该是一个单独的实体。如果Medai类型只有一个在您正在构建的范围内的名称,那么它是另一个实体的属性,应该只是一个列,而不是一个表。在这一点上,我会考虑使用一个枚举。

< P> >我要诚实-我在阅读时停止了……/P> 我在任何地方都使用了枚举法 通常将外键用于 单独的表格--艺术家姓名、标签 名字,还有其他几个

如果我理解正确的话,这意味着有一个所有艺术家的枚举。但艺术家的数量肯定会有变化:会有更多的艺术家。我真诚地怀疑唱片公司从未计划增加或改变艺人名单;)

因此,在我看来,这是对枚举的错误使用

我也不认为对不可避免的rathe执行
altertable