关于sql:MySQL表,在一个字段中有多个值

MySQL table with multiple values in one field

本问题已经有最佳答案,请猛点这里访问。

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

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

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

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


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

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

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

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

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


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

例如...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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....


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