我需要跟踪用户帐户旁边的“事件”,我不想为它添加整个数据库表。
存储整数集合/数组的最佳数据类型是什么?
我以为我可以使用文本并将值解析为数组,但必须有更有效的方法。
{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
用户的事件字段,最好的方法是什么。
答案 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的评论,为联结表添加了一个主键。