mysql – 数据建模.如何建模数百个依赖字段,1:n或作为一个表?
作者:互联网
我必须存放具有渐进累计运行成本的租赁汽车,例如:
主要数据:
Id: 123
Model: Ford Transit
yom: 2013
毕业变量运行成本:
kilometers/year utilities tires service misc
10,000 80 400 50 30
12,000 100 400 55 35
14,000 120 400 60 40
...
100,000 500 1,500 150 100
因此,在2,000和4种不同成本类型的步长中,10,000到100,000的比例,这导致50 x 4 = 200个数据字段.
将它建模为1:n关系或者在我的汽车表(MySql)中有超过200列是否可以?有什么优点和缺点?
在1:n的情况下,每当输入新的汽车记录时,触发器是否可以在变量成本表中创建200个字段?
提前感谢任何提示
解决方法:
So with a scale of 10,000 to 100,000 in steps of 2,000 and 4 different cost types, this results in 50 x 4 = 200 data fields.
是.当它是标准化时,每个记录的200个字段被转换为每个标准化行4个列.
Is it better to model this as a 1:n relation or is it ok to have more than 200 columns in my car table (MySql)?
好吧,如果你正在考虑关系,那就是1:n的关系.
在数据库中实现非规范化记录(例如,在您的情况下,200个字段之一)是绝对不可接受的.
What pros and cons do exist?
我不能在这里给出一个教程,但一般来说,规范化的行有(a)关系完整性,(b)关系能力[你会注意到以连接减少的形式],(c)关系速度(d)容易扩展[添加/更改数据库],以及(e)编码的简易性.没有哪个非标准化记录提供,它们提供相反的.
In case of 1:n, would a trigger make sense to create the 200 fields in the variable costs table whenever a new car record is entered?
通常,关系数据库中不需要触发器.只有在需要做奇怪的事情时才需要它们,而奇怪的事情是不对数据进行规范化的结果.
在您的情况下,添加的新车的200个值是未知的,因此无论如何触发器都不起作用.
不,在ACID交易中,当用户添加新车并且每公里步骤填充四列时,请正确执行.您可能有4个默认值自动填充屏幕上的字段,但在用户点击“添加”按钮之前,不应将其保存到数据库中.
数据模型
这是您需要的数据模型.
> Vehicle Maintenance Data Model
>我已经对数据进行了规范化,但没有解释步骤或过程,这是最终结果.
>例如.福特Transit不是Atomic,我通过分离制造商和型号使其成为Atomic.
>强制性/可选费用:
>如果每个维护(公里步长)行显示四个成本字段,则需要右侧的模型
>如果任何成本字段是可选的,则需要左侧的模型.我认为服务是强制性的,即.它发生在每公里入口.
>我已经为您提供了关系密钥,从而为您提供了关系完整性.如果您不使用复合键,您将失去完整性.例如:
>模型(例如Transit)不是独立存在的,它仅存在于制造商(例如Ford)的环境中.
> ModelYear(例如2013)不是独立存在的,它仅存在于模型的上下文中(例如Ford Transit).
>如果您认为名称代码过宽,您可以替换名称代码.
>维护表需要一个简单的CHECK约束,以确保公里步长为模2000.
这是一个IDEF1X模型. IDEF1X是关系数据库建模的标准.请注意每一个小嘀嗒声;缺口;并标记;乌鸦脚;实线与虚线;广场与圆角;意味着非常具体和重要的东西.请参阅IDEF1X Notation.如果您不理解符号,您将无法理解或使用该模型.
记录ID
请注意,现在很多人不了解如何使用关系模型的要求创建具有唯一行的关系表.它们创建文件,通常每个都有一个记录ID,并允许大量重复.请阅读this Answer,从顶部到假教师.并尝试其中给出和链接的代码.
警告
Zohar:
I would also suggest a lookup table for car models, so that each row in the cars table would have a model id instead of the model name.
这种建议来自于那些阅读了假教师的书籍,并且在没有任何实际知识或经验的情况下应用它并提出建议的人.它让每个人都陷入了1970年以前的ISAM记录文件系统,同时认为他们有一个“关系数据库”.
他们根本不知道他们缺少的关系完整性,权力和速度.如果有人提出问题,我会提供答案.不在这里,这个答案是完整的.
标签:mysql,database,database-design,data-modeling,relational-database 来源: https://codeday.me/bug/20190708/1400518.html