我正在为学校开发一个小项目,我不确定设计选择。
这是我想要实现的目标:
我有一个用户表,允许订阅/取消订阅存储在第二个表中的不同杂志。
我的问题相当容易。这是否证明使用连接表是正确的?我最初考虑将订阅者的ID直接包含在杂志表中,并附加一列。感觉很草率。
另一方面,如果我使用联结表,无论如何,我仍然会将多个ID(用户或杂志)存储到一个列中,因此感觉就像联结表没有用处。 / p>
你对它的看法是什么?
答案 0 :(得分:1)
您正在处理多对多的关系 - 学生可以订阅多个杂志,而杂志可以有多个订阅者。
处理此问题的方法是使用联结表,否则您最终会在学生或杂志表中找到重复的数据。
考虑:
student
id name mag_id
---------------------
1 Joe 1
1 Joe 2
1 Joe 3
2 Tom 1
etc
为了适应M-N关系,这里不必重复条目。
从长远来看,联结表将使事情变得更容易:
student
id name
1 Joe
2 Tom
magazine
id name
1 Weekly
2 Sports
junction
id stud_id mag_id
1 1 1
2 1 2
etc
通过这种方式,您可以为每个学生杂志配对添加唯一条目,减少其他字段条目的重复,并且更容易查询数据。
答案 1 :(得分:0)
不,联结表将完全避免在一行中有多个用户标识或杂志。你有两个关系:
CREATE TABLE users (
userid int,
username text,
...
)
和
CREATE TABLE magazines (
magid int,
magname text,
...
)
您的联结表连接这些表(多对多关系):
CREATE TABLE user_magazine (
userid int,
magid int
)
现在每个abonnement在联结表user_magazine
中输入一个条目。通常,您还会对user_magazine中的字段使用外键约束,并设置适当的索引。
我明确地推荐这个设计超过你的第二个提议选项。