我试图找出设计数据库的两种互斥方式之间的差异(如果有的话)。
假设我们有一个由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使用的设计。
我的问题:
答案 0 :(得分:1)
这两个问题都没有明确的答案。两者都是不同的技术,两者都是不同的设计,都需要不同的查询风格。
对于用例,我觉得这个问题很简单。
如果您的属性类型和attrs的数量。是常数(或接近常数)应该使用method1。更具体地说,如果您可以设置attrs数量的逻辑限制。然后你在method1中有一个“n”。 (因为字段名称不是flex.attr名称在你存储的对象之间应该相同,就像html一样)
如果你有一个随机数的attr。 &安培;随机数的attr。名。然后应该使用方法2。因为它可以适应(#ATRname,$ ATRvalue和#ATRS)的任何排列。
如果用于DB的正确设计。表现不会有问题。
存储在数据库中的XML对象
存储在db。中的HTML1.0对象
是的,两者都是工业DB的前设计。 用于不同目的。
我假设xml对象具有随机数的subobject with random attr。名字。与html不同。它只有有限的attrs数量。在现实生活中的例子中(因为html是可视框的代码表示),它不能用于复杂的结构。
另外
最专业的设计将两者结合使用。例如。 2.table看起来像很多东西。在TABLE1.1xTABLE1.2 ... xTABLE1.N。
另一件事是。我不觉得meta-id和前身是一起使用的。一个是fk,一个是pk。这很奇怪,因为pk意味着它可以用于关系。 fk意味着,它应该是唯一的(不一定是专业的东西)===另一个突变体pk。它可能有助于后端操作或更新,合并等。
我希望它有所帮助。