我有一个asp.net应用程序,使用大量主数据,如货币,国家,城市和许多其他领域特定的主数据。当前数据库模型对于每种类型的主数据都有一个主表。例如,各个国家/地区都有一个带有ID和值列的独立主数据表。对所有其他主数据进行类似。这是管理主数据的正确方法吗?我愿意彻底改变它。我想对此发表意见。还有什么文章或书籍可以为我在db建模中的这些场景做好准备吗?主数据表设计
主数据表设计
回答
在关系设计和数据建模中,没有“主”数据这样的事情,也没有“主”表这样的事情。只有数据和表格。
因此,如果您需要存储某些有关国家/地区的数据,即使它们只是其名称,然后创建一个国家/地区表。不过,不要使用身份证号码。使用ISO country code。这是人类可读的(大部分),而不需要连接。并确保名称上有一个唯一的约束,而不仅仅是代码。如果你可以有两个国家命名为“爱尔兰”,你就犯了一个错误。
仔细考虑应该允许谁在该表中插入,更新和删除行。 “每个人”几乎肯定是错误的答案。
当其他表需要存储现有国家/地区的代码时,这些表会为国家/地区表声明外键。
如果你正在谈论一个看起来像这样的“主”表。 。 。
ID Name
--
1 England
2 London
3 Birmingham
4 Liverpool
5 British Pound (sterling)
6 Republic of Ireland
7 Aughagower
8 Ballyshannon
9 Euro
然后,你正在创造更多的问题,有更多的表比你感到舒服。这种反模式的通用名称是“The One True Lookup Table”。
首先,外键在这里没用,因为没有办法向用户展示有效的国家,城市或货币可供选择的列表。如果用户简单地从该表中选择值,英格兰伦敦的用户可能会输入“Eury,Aughagower”。
其次,这是一个事实上不正确的模型。 “伦敦”不是指定城市的名称;尽管如此,“伦敦,英国,英国”,“伦敦,加拿大安大略省”和“伦敦,肯塔基州,美国”都是。如果您的数据库允许名为“美国阿拉巴马州旧金山”的“城市”,那么您的工作就没有做好。
第三,该模型不是干净可扩展的。货币本身比他们的名字有更多有用的属性。旧英镑有象征,英镑和ISO代码GBP。我记不起任何在过去30年中使用货币名称而不是其符号或ISO代码的报告。
最后,正确模拟数据不会“污染”数据库,也没有“迷你表”这样的东西。对数据进行建模可以简化您的工作,并简化应用程序代码。当你建立一个适当的关系模型时,每个表格将存储一种且仅有的一种事实。如果您遇到问题,您将确切知道在哪里寻找 - SQL错误消息几乎总是将导致问题的表命名为名称。排除国家表格的问题比使用存储50个或更多不同类型事实的“主”表格更容易。
如果表的数量不堪重负,请考虑将其中的一些放在不同的模式中。随着您获得经验,处理大量名字明确的表将成为第二性质,并且您将学会忽略与您的即时任务无关的表。
我看到很多使用Master Data Table(一个存放那些只有“ID”和“Name”属性的实体的大表)的生产软件。我发现这个设计很麻烦,但是另一个选项用几个迷你表来监控数据库方案。那么...... Master Data是一个糟糕的设计实践? – 2012-02-28 22:09:48
@CarlosGavidia:是的,“主”表是一个糟糕的设计实践。看到我更新的答案。 – 2012-02-29 12:36:25
为查找数据的每个种类提供单独的表格是合理的。这允许正确执行参照完整性。
E.g. COUNTRY_ID
字段(在某些“非查找”表中)有一个FOREIGN KEY引用COUNTRY
表,CURRENCY_ID
引用CURRENCY
表等......每个字段引用适合该特定字段的表。
- 1. 表数据结构设计
- 2. 数据库表设计
- 3. 数据库表设计
- 4. 数据库表设计
- 5. Mysql数据库表设计
- 6. 数据库表格设计
- 7. 设计数据库:表
- 8. 数据库表格设计
- 9. 关系数据库设计 - 一个表中的双主键?
- 10. 数据库表设计/设置
- 11. 数据库设计 - 配置/设置表
- 12. 数据库设计:从多个数据源的主键
- 13. 高可用性主动 - 主动数据库设计
- 14. 数百个表的数据库设计
- 15. 如何设置数据库表,数据库设计
- 16. 数据仓库设计 - 如何设计事实表?
- 17. 数据库设计:设计论坛表的最佳做法
- 18. 阅读和写表数据库设计
- 19. 服务列表MySQL数据库设计
- 20. 数据库设计 - 仪表板
- 21. 表设计为树状数据
- 22. 数据库设计如何参考表
- 23. 简单的数据库表设计
- 24. 数据库设计和大表?
- 25. 以下状态表数据库设计
- 26. 设计表来保存多国数据
- 27. 为删除的数据设计表格
- 28. 固定时间表数据库设计
- 29. 数据库设计 - 表格标准化
- 30. 数据库:动态标签设计表
我不知道我明白。你说你有一张像国家,货币,城市等的表格,而且它们基本上只是键值对,对吧? – 2012-02-28 15:11:32
@MattGrande。是啊,没错。他们大多用来填充前端的下拉列表。 – 2012-02-28 15:13:58
我会说那很好。继续这样做! – 2012-02-28 15:15:03