【问题标题】:Mysql. 1 table for all properties of all entities or 1 table per each entitymysql。 1 个表用于所有实体的所有属性或每个实体 1 个表
【发布时间】:2012-03-13 11:18:02
【问题描述】:

目前,我正在处理数据库结构,我想得到一条建议。

我有 2 个对象:横幅和广告。

我可以为他们创建横幅表和广告表,其中将保存有关每个实体的所有信息。作为主要优势,我看到与 1 个实体相关的所有内容都在此实体表中。

另一方面,我可能有一些表格,例如: 实体属性。 它将保存 value_id entity_id 属性值。主要优点是对于实体我只需要一些基本字段,其他字段可以放在这个表中。

但我不确定哪个是更好的做法和性能? 提前致谢。

【问题讨论】:

    标签: php mysql database database-design


    【解决方案1】:

    为了规范化,最好是每 1 个实体有 1 个表。规范化是最小化关系数据库中的冗余和依赖性的目标或方法。在您的情况下,横幅和广告是不同的实体。现在看来你可以在同一张桌子上使用它们。所以“冗余”并非如此。但是,如果您想稍后添加一些额外的字段怎么办?

    此外,代码复杂性和可读性是另一个问题。例如,当您在同一个表中添加不同类型的对象时,您需要添加内部逻辑以在代码中区分它们。这意味着您的代码复杂且可读性可能较差。

    【讨论】:

      【解决方案2】:

      这取决于您的系统的确切用途以及您尝试存储的属性/值。

      在我看来,我认为最好将重要和必需的信息保存在一个表中,即您的“ad”表中,其余的则保存在“ad_entities”表中,其中包含 ad_id、entity_name、entity_value 或您的应用程序类似的东西。

      这是一个很好的性能选择,因为您只需使用一个非常简单的查询就可以获取有关当前广告或所有广告的所有信息,您的对象可以轻松找出这些信息。

      【讨论】:

      • 是的,我已经测试了一点。我认为使用 1 entity=1 table 会更好
      • 我对您的测试结果很感兴趣,这决定您得出结论,因为如果所有这些实体都是必需的,您可能只需将它们添加到主广告表中,如果这些实体不是' t 必需/强制,最好不要将它们分别放在单独的表中。
      • 我的目标是让数据库尽可能简单。我想如果我只有基本实体表,存储一些主要属性怎么办。所有其他实体的所有其他属性都存储在“值”表中。仅保存 entity_id、属性和值的位置。 entity_type_id 也可能存储在那里。但是 php 代码变得有点复杂,所以我决定坚持 1 entity=1table 规则。
      猜你喜欢
      • 2021-03-17
      • 1970-01-01
      • 1970-01-01
      • 2014-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-22
      相关资源
      最近更新 更多