mysql内容字段:)

mysql内容字段:),mysql,database,performance,Mysql,Database,Performance,我为我们新的eccomemrce网站尝试了新的表格结构,比如Wordpress表格。但我不确定这是否真的是一个好主意 我们只有两个表来显示产品和其他内容(如美国页面、附件甚至订单)。他们的普通字段保留第一个表(如ID、标题、日期),但他们的特殊字段保留第二个表(如价格、数量、选项、功能)。这意味着一个产品的所有特殊字段都在一个表中 我们认为,如果我们聪明地使用缓存,这并不重要 你觉得怎么样 (如果你真的有很好的经验,请回答这个问题) 表格结构: 目录:(表一) 内容字段:(表2) 示例(获取具有

我为我们新的eccomemrce网站尝试了新的表格结构,比如Wordpress表格。但我不确定这是否真的是一个好主意

我们只有两个表来显示产品和其他内容(如美国页面、附件甚至订单)。他们的普通字段保留第一个表(如ID、标题、日期),但他们的特殊字段保留第二个表(如价格、数量、选项、功能)。这意味着一个产品的所有特殊字段都在一个表中

我们认为,如果我们聪明地使用缓存,这并不重要

你觉得怎么样

(如果你真的有很好的经验,请回答这个问题)

表格结构:

目录:(表一)

内容字段:(表2)

示例(获取具有1个ID且免费配送的产品):

我对这种型号的体验很差,我有资格吗?;)

这种抽象是有意义的,但在某种程度上,你必须权衡不同对象之间的相似性和差异:例如,将CMS模板和电子邮件模板组合在一起是有意义的(因为许多重要的部分是共享的),将CMS页面和送货单组合在一起是没有意义的(因为他们只有少量、相对不重要的共享数据)

“什么是足够相似的”的决定是主观的,但它需要做。否则,你可能会落入“一切都是对象”的陷阱

真实故事:我合作过的一家公司有一个类似的想法:所有东西(CMS页面、订单、客户、电子邮件)都是一个实体,存储在
entities
表中;特定于对象的属性转到
Entity\u properties
Entity\u property\u value
表中。这是一个巨大的邪恶混乱(TM),由于对象几乎没有共同点,因此99%的数据存储为实体属性和/或对其他实体的各种引用。(换句话说,将所有内容抽象为一个公共基础对象,会给我们留下许多无用的基础对象)。

我对这个模型的体验非常糟糕,我有资格吗?;)

这种抽象是有意义的,但在某种程度上,你必须权衡不同对象之间的相似性和差异:例如,将CMS模板和电子邮件模板组合在一起是有意义的(因为许多重要的部分是共享的),将CMS页面和送货单组合在一起是没有意义的(因为他们只有少量、相对不重要的共享数据)

“什么是足够相似的”的决定是主观的,但它需要做。否则,你可能会落入“一切都是对象”的陷阱


真实故事:我合作过的一家公司有一个类似的想法:所有东西(CMS页面、订单、客户、电子邮件)都是一个实体,存储在
entities
表中;特定于对象的属性转到
Entity\u properties
Entity\u property\u value
表中。这是一个巨大的邪恶混乱(TM),由于对象几乎没有共同点,因此99%的数据存储为实体属性和/或对其他实体的各种引用。(换句话说,将所有内容抽象到一个公共基础对象会给我们留下许多无用的基础对象)。

这是个坏主意:不要这样做

数据库表以及它们之间的关系应该为数据建模

您建议的简单模型会阻止您有效地为数据库编制索引,并使查询数据变得异常困难。(您建议的模型有时是必要的,但仅当您不知道数据的格式时。)

你建议使用这种模式是因为你不喜欢有很多很多表吗?我同意很多表可能会让人困惑,但一个好的命名约定应该能解决这个问题。例如,在我的一个数据库中

  • 所有表格的前缀都是字母,然后是下划线
  • 与客户相关的所有表格都有前缀
    c_
    ,例如
    c_客户
    c_地址
  • 所有与产品相关的表格都有前缀
    p\u
    ,例如
    p\u product
    ,以及
    p\u price\u list

    • 这是个坏主意:不要这样做

      数据库表以及它们之间的关系应该为数据建模

      您建议的简单模型会阻止您有效地为数据库编制索引,并使查询数据变得异常困难。(您建议的模型有时是必要的,但仅当您不知道数据的格式时。)

      你建议使用这种模式是因为你不喜欢有很多很多表吗?我同意很多表可能会让人困惑,但一个好的命名约定应该能解决这个问题。例如,在我的一个数据库中

      • 所有表格的前缀都是字母,然后是下划线
      • 与客户相关的所有表格都有前缀
        c_
        ,例如
        c_客户
        c_地址
      • 所有与产品相关的表格都有前缀
        p\u
        ,例如
        p\u product
        ,以及
        p\u price\u list

      这听起来像是一个以各种名称命名的经典反模式,如“系统中的系统”、“数据库中的数据库”或“内部平台效应”。这听起来像是一个以各种名称命名的经典反模式,如“系统中的系统”、“数据库中的数据库”或“内部平台效应”。
      CONTENT_ID   TITLE  DESCRIPTION  DATE
      
      FIELD_ID   CONTENT_ID    KEY_NAME    VALUE
      
      SELECT *  FROM `contents` as c LEFT JOIN `content_fields` as cf ON  c.content_id = cf.content_id WHERE c.content_id = 1 AND  cf.key_name = 'free_shipping' AND cf.value = 'yes'