数据库架构设计 - 如何针对实体存储特定的应用程序设置

时间:2011-06-30 17:49:51

标签: database-design polymorphic-associations

我正在尝试设计一些数据库表来存储有关某些实体及其关联的应用程序的配置设置。我可以到目前为止,但已经打了一个“砖墙”。我会告诉你我的意思......(不要采取以下措施:图片,作为一个文字商业问题,图片只是向你解释我的问题的简单方法)。

标准

  1. 我们有一些catlog图片。
  2. 我们有几个应用程序可以 消耗任何数量的这些 图片。
  3. 我们要配置如何显示这些图片 取决于在应用程序上。
  4. 请记住,每个应用程序都有一个特定且独特的方式,可以配置它来显示图片。

    所以我们很清楚我们需要2张桌子PICTURE和APPLICATION以及一个连接表来显示M-M关系,因为很多照片都可以在很多应用中使用 - 见下文:

    enter image description here

    我用红色突出显示了“CONFIG_TABLE”栏目 - 我非常怀疑这是坏事,非常非常糟糕。它显示对于特定应用程序,这是用于存储设置的配置表。请参见下文:

    enter image description here

    所以 - 根据您正在谈论的应用程序,有非常特殊的应用程序配置应用于图片。现在假设设计被破坏,我相信它是 - 我如何设计数据库来正确建模? (希望这很有意义)

1 个答案:

答案 0 :(得分:5)

设计与正确无关。您根本不需要application.config_table列。相反,每个应用程序应该知道哪个表与其自己使用的图片有关。

因此,例如在PicManager应用程序中,您可以这样做:

SELECT p.*, c.*
FROM Picture_Appliation AS pa
INNER JOIN Picture AS p ON pa.pic_id = p.pic_id
LEFT OUTER JOIN Picman_Config AS c ON p.pic_id = c.pic_id
WHERE pa.app_id = 100;

在每个其他应用程序中,您将在查询中编写不同的配置表。

不要试图让它太“自动”或“数据驱动”。只需编写适合每个应用程序的代码。您可以将数据驱动的方法用于数据值(例如app_id = 100),但不能使用代码。数据就是数据。代码就是代码。

您可能只想编写一个可在所有应用程序中使用的可重用类,但这就是子类的用途。