多个数据库表或组合成一个

mae*_*jed 3 mysql sql database database-design

我有一个关于数据库架构的问题.

我们正在建立一个CMS.有很多字段会预先填充选择.例如,客户的信用状态可以是"好","差","未知"或"存款".该项目的规范是这些预先填充的选择是动态的,管理员可以通过后端添加新值.所以我需要将这些值存储在数据库中.

我正在努力在两种方法之间做出决定

1)为每种列表都有一个表格.示例可以是list_CrediStatus,list_Branches,list_Markets等表.

优点是表格不是很大并且它们彼此分开.因此,一个表上的数据和查询负载可能不会影响其他表?缺点是会有很多.也许30?并且每个表需要一个查询.

2)有两张桌子.有一个描述表,您可以在其中定义所有不同的列表名称(list_CreditStatus,list_Branches等).另一个表包含所有列表的所有值以及将每行链接到描述表中的标识符的外键.

优点是较少的表,1个查询和统一格式.缺点可能在于性能.需要对此表进行大量查询.它将有许多行和大量数据.

有人有建议吗?我倾向于选项2.如果这没有意义,请告诉我.写清楚是一个难题.

谢谢,杰德

Ken*_*wns 10

总是把东西放在一张桌子里,而不像单独的桌子里的东西.这意味着你选择选项1.记住:基于字段名称的肤浅相似性并不意味着它们就像是事物.

单表解决方案具有诱人的吸引力,因为它看起来更简单,但事实并非如此.保持这些分离所需的代码变得非常复杂.

另外,您无法使用正确的外键.How do you say一个ORDER有一个列CREDIT_STATUS引用列表表,不允许有人放入血型(或其他)值?


Bri*_*new 7

我会为每种类型提供一张桌子.为什么?除了其他原因之外,您可能很容易发现这些数据类型会逐渐产生特定于该类型的附加信息.如果所有内容都合并到一个表中,那将非常难以满足.

(免责声明:我已经在这样一个系统上工作了一个包含月,日,商品类型,真/假(是的!),假期日期等的表.它基本上是一个巨大的杂项抓包,类似于仁慈天体商场知识)

不要担心每个表的查询.这就是数据库擅长的,我不会太早优化.直到你遇到问题/问题.