有关使用Web应用程序主表设置中央数据库的建议

时间:2010-03-16 12:27:12

标签: sql-server database-design

我开始编写越来越多的Web应用程序来开展工作。其中许多Web应用程序需要存储相同类型的数据,例如location。

我一直在考虑创建一个中央数据库并在那里存储这些“主”表并让每个应用程序访问它们可能会更好。

我不知道该怎么做。

  • 我应该在应用程序的数据库中创建表来复制主表中的数据并存储在应用程序表中(使用外键与其他应用程序表链接)?

  • 我是否应该使用类似Web服务的内容来读取主表中的数据,而不是在我的应用中启动新的数据库连接?

  • 我是否应该忘记这个想法并将数据存储在我应用的数据库中?

我想拥有位置中心等数据,这样我就可以转到一个表并添加一个新位置,下次有人需要从其中一个应用程序中选择一个位置时,新的位置就会出现。< / p>

我正在使用ASP.NET MVC 1.0来构建Web应用程序,并使用SQL 2005作为数据库。

需要一些建议...... 谢谢!

3 个答案:

答案 0 :(得分:2)

这是一个非常常见的问题,处理此问题的最佳方法是问自己以下问题:

我是否需要在其他应用程序中重复使用此数据?

如果答案是肯定的,那么你绝对应该设计你的表,使其与实际应用程序分开。让我给你举个例子。假设您将编写一个应用程序来记录公司员工的帮助台票。您注意到的一件事是员工已经存储在名为AcmeEmployees的公共数据库中。

您作为程序员/ dba的目标是避免重复,管理和印刷错误。所以你最多只想管理一次数据。您的帮助台应用程序有意义地重用存储在另一个数据库中的员工信息。

如果您编写存储过程并且想要访问此员工数据,则只需执行以下操作:

SELECT EmpFullName FROM AcmeEmployees.dbo.Employees

那就是databaseName.ownder.tableName。因此,设计时考虑到您希望重用常见数据。这样做有以下好处:

  • 插入/更新只执行一次
  • 很少甚至没有印刷错误(如果一旦你不必担心就完成了)
  • 在整个域(使用此公共数据的所有应用程序)中自动查看对源数据的任何更改
  • 可重复使用意味着更少有人从事文书工作,而且有更多时间来处理其他问题。
  • 状态等字段会影响应用程序,例如,如果员工决定离开公司设置,员工=非活动状态将确保员工不再能够在服务台登记门票,那么我在上面提到的服务台系统中会受到影响系统。这是将旧数据保留在新系统之外的好方法
  • 最好的一个,它才有意义,在我的工作场所,我们有很多不同的应用程序,但好的是我们有一组通用的数据表。其中一个是员工。如果我们不得不重新创建一名员工并设置名字,姓氏,中间姓名等,每次我们找到一名新员工并且我们不得不在每个应用程序中插入该员工时,我会讨厌它。

让我们继续我们员工的榜样。 HR现在是更新或插入员工信息的主要部门。然后,我可以重复使用此表来创建我的帮助台跟踪系统,但是说经理想要一个组织结构图。他/她想要某种组织层级列表管理者和向其经理报告的员工。你认为,你有一个共同的数据库表“Employees”,其中包含EmployeeName,Status,ManagerID等字段。然后,您可以快速构建组织。图表应用程序使用相同的公共数据:

SELECT ManagerID as TheManager, EmployeeName
FROM Employee
WHERE Status='Active'
  AND ManagerID="SomeManagerID"

现在,您已经有一组员工向经理报告,您可以基于此构建层次结构。那么你可能会问的第二个例子有什么意义呢。这意味着您的开发变得更加快速。您不必担心设计另一个数据库,而是重用您可以使用的常用数据库。它加速了发展!

答案 1 :(得分:1)

根据数据的不同,它是多么复杂,无论您是否以关系术语使用它等等,您都希望:

  1. 只需将其存储在应用程序的数据库中即可。如果它被复制但是静态的,那真的无关紧要;或
  2. 将其存储在内存缓存或类似的内存缓存中,并使所有应用程序使用一个实例,或者根据需要使用多个实例。

答案 2 :(得分:1)

嗯,这取决于你想做多少工作: - )

一个案例,我已经看到它在SQL Server中使用中央数据库表完成了。当查询读取数据时,他们可以读取它:

从CentralDB.dbo.RefTable

中选择*

因此,您可以将所有过程放在数据库中,但如果需要,可以从中央数据库中读取数据,这样就可以管理一个数据库。

或者,如果您共享应用程序数据,我看到的另一种方法是让批处理过程将数据从共享公共DB迁移到每个单独的DB,这样您仍然可以拥有一个主副本,并且数据会被定期推出。

你必须解决这个问题,当一个应用程序的值发生变化时,如何处理其他应用程序。它应该自动出现,还是不应该出现。这对美国各州,邮政编码,学区等类似,但对其他类型的数据来说可能很麻烦。

HTH。