如何使用大型数据库的命名约定?

时间:2010-04-08 20:14:58

标签: mysql database

我正忙着用MySql数据库开发2个基于Web的系统,表/视图/存储例程的数量确实变得很多,处理复杂性越来越具有挑战性。

现在在编程语言中我们有命名空间,例如Java包,用于对软件进行分区的C ++命名空间,将它们组合在一起以使事情更容易理解。另一方面,数据库具有更多的扁平结构(至少MySql),例如表和存储过程在同一级别上。因此,必须更具创造性,创建命名约定,可能使用多个数据库或使用工具来可视化事物。

您使用什么方法来缓解疼痛?要在开发数据库时有效吗?为了不迷失在桌子和田野以及存储过程的海洋中?

随意提及您使用的工具,但尝试将其限制为开源,最好是Linux解决方案,如果可以的话。

b.t.w数据库在设计方面必须考虑多少个表?

7 个答案:

答案 0 :(得分:3)

我发现的唯一解决方案通常适用于开发一系列前缀并将其应用于表格(例如,主要与人力资源相关的表格都将以hr_开始)。我通常将前缀带到应用程序中的其他“对象”(表单,报表,视图,存储过程)。

这个解决方案远非完美而且是一种破解,但它确实为系统带来了一些秩序。

答案 1 :(得分:2)

Oracle电子商务套件拥有超过25,000个表和约33,000个视图。我想说这是一个大型架构。

答案 2 :(得分:1)

当然,绝对使用命名约定。 MySQL数据库设计是我使用匈牙利表示法的最后一个地方之一,但我用“tbl”开始所有表格,用“v”表示我的所有观点等。

此外,我在MySQL Workbench中构建了多个数据库图表,通常每个域聚合至少有一个图表,这有助于我可视化架构中的“模块”。

这是一个像Sql Server这样的产品具有很大优势的领域,因为数据库对象可以属于数据库中的多个模式,就像编程中的命名空间一样。

答案 3 :(得分:1)

嗯...... MySQL中没有真正的解决方案。对于某些数据库(例如PostgreSQL),您确实拥有名称空间,您可以这样做。

你可以通过使用多个数据库模拟命名空间来解决它,但这可能会带来很多问题。

就个人而言,我只是简单地命名所有内容,使管理工具能够区分它(例如phpMyAdmin自动使用下划线来分组数据库)。

答案 4 :(得分:1)

在某些数据库中,您可以使用模式,但我认为不是在mySQL中。将相关表保持在一起的命名约定是最好的选择。我特别努力做的一件事就是在不同表中的命名字段中完全相同。如果我的用户表调用了user_id,那么我不希望在不同的相关表中将其视为person_id,userid,User等。此外,当从表到表使用相同类型的字段时,使用相同的数据类型(如果是字符串数据,则使用大小)。然后,您将不会不断地转换数据来进行连接。

至于您需要多少个表作为一个大型数据库,这更多地取决于表中的记录数量而不是表的数量。许多小型数据库有数百个表。我几乎不会担心表的数量,除非我看到有人创建像Financials2009,Financials2010等表格。

答案 5 :(得分:1)

在一个项目中对我有用的解决方案是我们将数据库分成块,然后我们绘制了一个大的ERD(我们使用Corel,实际上,虽然有许多更好的工具可用),我们对这些盒子进行了颜色编码每张桌子都显示出每个表格的大小,然后我们将它打印在一台大​​幅面打印机上,这样它就像5英尺高,10英尺宽,我们将它挂在助理办公室的墙上。不是一个高科技的解决方案,但它非常实用。

我们对一致命名也很细致,以回应HLGEM的回答。

回想起来,一个将每个表名称加上“块名称”前缀的命名约定可能是一个好主意,但如果没有它,我们的表现相当不错。

至于有多大?我不知道,这是一个非常主观的问题。我一般认为,当我无法一次想到整个事情时,数据库很大。实际上,我猜你通过了几十张桌子。记录数量几乎无关紧要:一个数据库有两个表,每个表有十亿条记录,很容易理解;一个包含1000个表的数据库,每个表有10个记录,很难理解。

答案 6 :(得分:0)

  

另一方面,数据库有更多的扁平结构(至少是MySql)

...但您可以在同一个mysql实例上运行多个数据库,例如

SELECT *
FROM common.address adr
purchasing.orders pod
WHERE pod.cust_id=adr.cust_id

(NB尽量避免使用mysql'USE dbname')。在查询中标准化别名是个好主意。

  

在设计方面,数据库必须考虑多少个表?

我认为没有标准指标。我可能会在50左右开始感到困惑。我照顾的一个Oracle数据库有1567(是的,它是规范化的(有点))

相关问题