我目前正在为一所大学新闻机构撰写博客。不过,每篇文章都代表一个完整的节目,有多个贡献者和多个标题。
例如,一篇帖子可能有三个新闻故事,每个故事都有自己的标题,每个故事都有一些贡献者:
因此,对于每个帖子,每个故事都会有一个索引(1,2,3 ...),标题的VARCHAR和代表贡献者的id,其详细信息存储在另一个“贡献者”表中。问题是我不知道会有多少故事,或者每个故事会有多少贡献者。它的范围可以从最少3到最多6个。如果我们的节目在未来扩展,我也希望能够扩展到甚至超过6个帖子。
我想在mySQL专栏中简洁地表示这个结构,但我不知道该怎么做。一种解决方案是创建另一个mySQL表来保存每个故事的细节,但我宁愿避免这种麻烦。理想的解决方案是,如果我能以某种方式在mySQL列中创建一个“数组”,它可以存储(对于每个故事)一个索引,一个字符串和多个id来显示贡献者是谁。
这是可能的,还是我必须创建一个新表来跟踪每个故事?
答案 0 :(得分:1)
不要使用列 - 使用表格。它可以是一个简单的InnoDB表,它根本不会损害性能。定义组合主键(story_id, contributor_id)
并在该表中插入所有贡献。
您在问题中的名称称为M:N表。不要去那里 - 这是一件非常糟糕的事情,事实上,在关系数据库中几乎是不可能的。
答案 1 :(得分:0)
为自己节省一些未来的胃灼热。创建额外的表。它看起来像[帖子]与[故事]有一对多关系的表格,其中[故事]与[贡献者]有多对多的关系。
答案 2 :(得分:0)
您可以在一列中存储以逗号分隔的字符串值的贡献者ID或故事ID,但是,您究竟如何与它们相关联?在这种情况下,你最好的选择是将它作为'数组'的'数组',你的主要字符串由用逗号串在一起的字符串组成。我(所以这只是我的意见,好吗? )除非完全必要,否则会避免使用(此时不能想到一个实例)......
所以创建关系表。只是为了说明这个想法的一种方法:
-- a story may have multiple contributors
CREATE TABLE story_contributor_rel (
story_id INT NOT NULL
, contributor_id INT NOT NULL
)
-- a post may have multiple stories
CREATE TABLE post_story_rel (
post_id INT NOT NULL
, story_id INT NOT NULL
)
或者作弊,但我也建议不要这样做(!):
-- a less-normalized way
CREATE TABLE post_relationships (
post_id INT NOT NULL
, story_id INT NOT NULL
, contributor_id INT NOT NULL
)
这些只是最简单的方法。当然,你想要有额外的缩进列和/或正确的索引和主键设置,但这只是我能够更好地说明我的驾驶点的方式。
想象一下。如果你把所有这些关系放在逻辑列中,那么没有应用程序,任何人都不会那么容易理解表中发生的事情。如果您没有在表结构中放置任何逻辑,并且如果您正确设置关系跟踪(意味着关系表),那么它将显得透明。看一下这些表,一个不需要花很长时间才能理解......
这只是我的意见。 :)干杯!