MySQL表在一个字段中有多个值

时间:2012-03-14 09:53:36

标签: mysql sql database database-design

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

我应该如何继续此表的数据库设计。地址/位置,价格等字段非常简单,但有一些部分,如Kitchen Appliences,Property Usage等...销售人员可以检查该字段的多个值。

此外,一个属性可以有多个人附加到它(从表人),这可以是intermediaire,所有者,卖方,财产律师等...我应该使用一个字段为此或只是我创建一个额外的表并规范化绑定?

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

3 个答案:

答案 0 :(得分:7)

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

使用Kitchen Appliances,Property Usage等部分......销售人员可以检查该字段的多个值,这取决于它是否总是可以指定的多个选项的相同集合:

  • 如果总有相同的多个选项集,则可以在属性表中为每个选项包含布尔列。
  • 如果可能存在适用于不同属性的各种不同选项,则设置单独的表来保存可用选项更有意义,并且链接表用于保存哪些选项适用于哪些属性。

第一种方法更简单,可以预期更快,而后一种方法更灵活。

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

答案 1 :(得分:3)

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

例如......

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....

答案 2 :(得分:0)

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