集合的最佳数据类型

时间:2014-11-24 21:42:45

标签: mysql sql

我需要跟踪用户帐户旁边的“事件”,我不想为它添加整个数据库表。

存储整数集合/数组的最佳数据类型是什么?

我以为我可以使用文本并将值解析为数组,但必须有更有效的方法。

{1,6,18,427,293}

^假设我有一个类似于此的数组,但它可以更小或者可能更长,它只取决于用户。

这基本上就是我想要创造的东西

用户

Id  |  Name   |  Events
0     James     {1,2}
1     Kitty     {0}
2     Mark      {1,3}
3     Adam      {1,2,3}

活动

Id    |  Name   |  Location |  Date
0       Event 1     Here      Tommorow
1       Event 2     There     Yesterday
2       Event 3     Around    Eventually
3       Event 4     Near      Someday

用户的事件字段,最好的方法是什么。

1 个答案:

答案 0 :(得分:1)

这违反了第一个正常形式:

First normal form (1NF) is a property of a relation in a relational database. 
A relation is in first normal form if the domain of each attribute contains
only atomic values, and the value of each attribute contains only a single
value from that domain.

您的User.Events列不是原子的,因为它包含商业传感器中的多个值。

这里的解决方案是创建另一个名为junction table的表,这是表示N:N关系的经典方法。 (通常命名为table1name_table2name)

此表包含对两个表的引用:

CREATE TABLE User_Event (
    UserId INTEGER NOT NULL REFERENCES User(Id),
    EventId INTEGER NOT NULL REFERENCES Event(Id),
    PRIMARY KEY (UserId, EventId)
)

根据您的示例,此表的值为:

UserId  |  EventId
0          1
0          2
1          0
2          1
2          3
3          1
3          2
3          3

编辑:感谢okiharaherbst的评论,为联结表添加了一个主键。