【问题标题】:MySQL table with multiple values in one field [duplicate]MySQL表在一个字段中有多个值[重复]
【发布时间】:2012-03-30 18:27:11
【问题描述】:

我正在为一家房地产公司建立一个数据库。这些房地产由销售人员使用 CodeIgniter 网站管理。

我应该如何进行该表的数据库设计。地址/位置、价格等字段非常简单,但有些部分如厨房设备、物业使用等......销售人员可以在其中检查该字段的多个值。

此外,一个财产可以有多个人(来自表格人员),这可以是中间人、所有者、卖方、财产律师等...我应该为此使用一个字段还是只创建一个额外的字段表和规范化绑定?

仅使用一个字段并使用序列化数据是最好的方法还是有更好的方法?

【问题讨论】:

    标签: mysql sql database database-design


    【解决方案1】:

    在关系数据库中,您永远不应该在一个字段中输入多个值 - 这违反了第一范式。

    对于厨房电器、物业使用等部分......销售人员可以检查该字段的多个值,这取决于它是否始终是可以指定的同一组多个选项:

    • 如果始终存在同一组多个选项,您可以在属性表中为每个选项添加一个布尔列。
    • 如果可能有多种不同的选项适用于不同的属性,那么设置一个单独的表来保存可用选项,并设置一个链接表来保存哪些选项适用于哪些属性会更有意义。李>

    第一种方法更简单,预计执行速度更快,而后一种方法更灵活。

    类似的考虑也适用于与每栋房屋相关的人员;但是,考虑到单个财产可以(例如)拥有多个所有者,第二种方法似乎是唯一可行的方法。因此,我建议使用单独的表来保存人员详细信息(姓名、电话号码等)和人员角色(例如所有者、卖家等),并使用链接表将角色与属性和人员联系起来。

    【讨论】:

      【解决方案2】:

      你应该为它创建额外的表......

      例如...

      Consider the scenario that 1 item may have many categories and 1 category may have many items...
      
      Then you can create table like this...
      
      Create three tables for that....
      
      (1) tblItem :
      
        fields:
                  itemId  (PK)
                  itemName
                  etc..
      
      (2) tblCategory :
      
        fields:
                  categoryId  (PK)
                  categoryName
                  etc..
      
      (3) tblItemCategory :
      
        fields:
                  itemId  (PK/FK)
                  categoryId  (PK/FK)
      
      So according to your data you can create an extra table for it....
      I think it would be optimize way....
      

      【讨论】:

        【解决方案3】:

        如果您希望数据采用第三范式,那么您应该考虑添加额外的表格,而不是将多个值编码到各个字段中。不过,这取决于您的简报能走多远。

        【讨论】:

        • 感谢您的反馈。但是从 MVC 的角度来看,我应该为每个表创建一个类/控制器吗?
        • 这超出了数据库设计的范围,完全是一个不同的问题。
        • 从 MVC 的角度来看,控制器与数据库表没有任何关系。
        • @nem75:Simon 正在使用 CodeIgniter。我想每个数据库表都有一个模型+视图+控制器的约定。
        • @bancer:来自 CodeIgniter 用户指南:“CodeIgniter 对 MVC 有一种相当松散的方法,因为不需要模型。如果您不需要额外的分离,或者发现维护模型需要更多复杂性您可以忽略它们并使用控制器和视图最少地构建应用程序。CodeIgniter 还使您能够合并自己的现有脚本,甚至为系统开发核心库,使您能够以最有意义的方式工作给你。”无论如何,我不同意他们对 MVC 的看法,但这是另一个话题。 :)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-31
        • 2015-07-20
        • 1970-01-01
        相关资源
        最近更新 更多