父表和子表MySQL

时间:2014-08-08 16:59:20

标签: mysql database

我试图找出设计数据库的两种互斥方式之间的差异(如果有的话)。

假设我们有一个由userID组成的用户表,这将被视为最佳做法'在存储用户数据方面?

我们的表:

userID PK. 

我已经看到使用了以下两种情况,并且感觉最后一种情况不太有用:

存储的元数据:
方法1:

meta_id(pk), userID(fk), attribute1, attribute 2 ... attribute n  

方法2:

meta_id(pk), userID(fk),attribute_name,attribute_value  

因此,不是每个用户只有一个元行,我们最终会有多个元行。 这是WordPress使用的设计。

我的问题:

      
  1. 一种方法比其他执行查询慢吗?   
  2. 它们都被视为行业标准,如果是,每种方法的用例是什么?

1 个答案:

答案 0 :(得分:1)

这两个问题都没有明确的答案。两者都是不同的技术,两者都是不同的设计,都需要不同的查询风格。

对于用例,我觉得这个问题很简单。

  • 如果您的属性类型和attrs的数量。是常数(或接近常数)应该使用method1。更具体地说,如果您可以设置attrs数量的逻辑限制。然后你在method1中有一个“n”。 (因为字段名称不是flex.attr名称在你存储的对象之间应该相同,就像html一样)

  • 如果你有一个随机数的attr。 &安培;随机数的attr。名。然后应该使用方法2。因为它可以适应(#ATRname,$ ATRvalue和#ATRS)的任何排列。

如果用于DB的正确设计。表现不会有问题。

一些更恶心的例子

  1. 存储在数据库中的XML对象

    • metod1
      • 所有xml对象的属性都不能超过n个。
      • 未使用的attrs。意味着不必要的存储空间和缓慢的查询。
      • 内部值将需要另一个fk,它指向同一个表中的另一行。不是专业方法。
      • 如果此表很小,查询将更快地运行。但是,当谈到工业用途时。由于其大小,此表实际上不能返回任何值。
      • 简单的100kb xml文件可能需要数千行。
      • 非常灵活。一个表可以在一个表中存储一个/多个文件或/和一个/多个对象。
    • metod2
      • xml对象可以包含任意数量的属性和属性名称。
      • 未使用的attrs。不会放大DB。
      • 所有表格和行都可以在文件中显示。亲的。
      • 如果此db很小,由于关系数量的原因,查询会变慢。但是,当谈到工业用途时。 DB可以使用
      • 简单的100kb xml文件可能需要几十行*几十个表。
      • 所有表格都需要有关于存储内容的特定目的。
  2. 存储在db。中的HTML1.0对象

    • metod1
      • n是由html1.0支持的#attributes。
      • 未使用的attrs。意味着不必要的存储空间和缓慢的查询,因为行大小和数字(与其他相比没那么多)。
      • 如果此表很小,查询将更快地运行。但是,当涉及到工业用途时,由于html层次表/文件可以轻松划分。
      • html的数量=行数。美味
      • 不灵活,但html层次结构不是flex。太。一个表可以在一个表中存储一个/多个文件或/和一个/多个对象。使用表和rel.s
    • metod2
      • html对象可以包含任意数量的属性和属性名称。但是有特定数量的attrs。那个html obj。可以有。 =很多不必要的表关系等。
      • 未使用的attrs。不会放大DB。
      • 所有表格和行都可以在文件中显示。 = no null cells
      • 如果此db很小,由于关系数量的原因,查询会变慢。然而,当谈到工业用途时(假设html obj和xml obj的复杂性和随机性,就像它一样;)表
      • 简单的100kb html文件可能需要数百个表。
  3. 是的,两者都是工业DB的前设计。 用于不同目的。

    我假设xml对象具有随机数的subobject with random attr。名字。与html不同。它只有有限的attrs数量。在现实生活中的例子中(因为html是可视框的代码表示),它不能用于复杂的结构。

    另外

    • 最专业的设计将两者结合使用。例如。 2.table看起来像很多东西。在TABLE1.1xTABLE1.2 ... xTABLE1.N。

    • 之间
    • 另一件事是。我不觉得meta-id和前身是一起使用的。一个是fk,一个是pk。这很奇怪,因为pk意味着它可以用于关系。 fk意味着,它应该是唯一的(不一定是专业的东西)===另一个突变体pk。它可能有助于后端操作或更新,合并等。

    我希望它有所帮助。