如何建模数据库?

时间:2017-11-07 11:58:06

标签: mysql database-design data-modeling

我正在开发一个系统,而且我在建模时遇到了问题。

我有一张名为" Company"我需要每个公司的商店参数。

所有公司必须具有相同的参数,可以改变的是每个参数的值。这些参数用于设置一些系统资源。

建模的最佳方式是什么?

A)
公司(身份证,姓名,......)
参数(id,company_id,param1,param2,param3,param4,param5)

B)
公司(身份证,姓名,......)
参数(id,name)
Company_Parameters(company_id,parameters_id,value)

C)
另一个。什么?

示例:

公司A:
徽标地址:' http://www.logo.com/logo.jpg'
登录尝试:3
主题:' red'
显示评论:真实 启用通知:false

公司B:
徽标地址:' http://www.logo.com/logo2.jpg'
登录尝试:1
主题:'蓝'
显示评论:false
启用通知:true

Ps:这个例子是虚构的

在选项A:

公司:
(id:1,姓名:'公司1',...)
(id:2,姓名:'公司2',......)

参数:
(id:1,company_id:1,logo_address:' http://www.logo.com/logo.jpg',
logon_attempts:3,主题:' red',show_comments:TRUE,enable_notifications: FALSE)
(id:1,company_id:2,logo_address:' http://www.logo.com/logo2.jpg',logon_attempts:1,主题:'蓝色',show_comments:FALSE,enable_notifications:TRUE)

在选项B中:

公司:
(id:1,姓名:'公司1',...)
(id:2,姓名:'公司2',...)

参数:
(身份证号码:1,姓名:'徽标地址')
(id:2,姓名:'登录尝试')
(身份证号码:3,姓名:'主题')
(身份证号码:4,姓名:'显示评论')
(id:5,名称:'启用通知')

Company_Parameters:
(company_id:1,parameter_id:1,值:' http://www.logo.com/logo.jpg')
(company_id:1,parameter_id:2,value:3)
(company_id:1,parameter_id:3,value:' red')
(company_id:1,parameter_id:4,值:TRUE)
(company_id:1,parameter_id:5,值:FALSE)
(company_id:2,parameter_id:1,值:' http://www.logo.com/logo2.jpg')
(company_id:2,parameter_id:2,value:1)
(company_id:2,parameter_id:3,value:' blue')
(company_id:2,parameter_id:4,值:FALSE)
(company_id:2,parameter_id:5,值:TRUE)

2 个答案:

答案 0 :(得分:0)

选项A看起来像关系方法,是我的默认选择。

选项B是一种可疑的方法,称为实体 - 属性 - 值解决方案。问题在于value中的COMPANY PARAMETERS域取决于parameters_id的值。某些参数值需要整数类型,有些是varchar类型。因此,您将在一列中混合使用值类型,并且您执行的任何查询都必须考虑该列中不同的值域。另一个问题是,当您想要根据多个参数查询公司时,您将不得不进行大量的自连接,从而使您的查询复杂化。

答案 1 :(得分:0)

"所有公司必须具有相同的参数,可以改变的是每个参数的值。"然后有一个表,每个参数有一列。

即使某些公司没有主题,或者您还不知道主题,也可以在单元格中添加NULL

我不会使用超过60列。如果您有数百列,请考虑使用JSON字符串来拼写您不需要过滤或排序的杂项。这也适用于“可选'参数。