在 MySQL 中设计两个表以在 JPA 中使用
Designing two tables in MySQL to use in JPA
我想设计两个table如下,请问这样设计是否正确
table 推文:tweet_id,...
tweet table 需要 0..* 话题标签 -> table 话题标签:hashtag_id,tweet_id,hashtag
我想在 JPA 中使用它们,所以我认为两个 table 都需要主键。
提前致谢
是的,这是正确的:推文和主题标签之间存在一对多关系。
实际上,如果您想要一个完全规范化的模式,您不应该让主题标签的文本在许多推文中重复多次。
换句话说,你应该有 3 tables:
Tweet table
tweet_id
tweet_text
Tweet_Hashtag table (this is purely a join table)
tweet_id
hashtag_id
Hashtag table
hashtag_id
hashtag_text
所以一条推文有很多 tweet_hashtag 个,一个话题标签有很多 tweet_hashtag 个。
tweet 和 hashtag 之间是多对多的关系。
然而,在现实世界中,不太可能创建单独的标签 table,因为它们在 Twitter 中的使用限制为 139 个字符,并且创建(全球)唯一 ID 系统将是难的。因此,主题标签的文本无论如何都可能被用作唯一键。
我想设计两个table如下,请问这样设计是否正确
table 推文:tweet_id,... tweet table 需要 0..* 话题标签 -> table 话题标签:hashtag_id,tweet_id,hashtag
我想在 JPA 中使用它们,所以我认为两个 table 都需要主键。
提前致谢
是的,这是正确的:推文和主题标签之间存在一对多关系。
实际上,如果您想要一个完全规范化的模式,您不应该让主题标签的文本在许多推文中重复多次。
换句话说,你应该有 3 tables:
Tweet table
tweet_id
tweet_text
Tweet_Hashtag table (this is purely a join table)
tweet_id
hashtag_id
Hashtag table
hashtag_id
hashtag_text
所以一条推文有很多 tweet_hashtag 个,一个话题标签有很多 tweet_hashtag 个。
tweet 和 hashtag 之间是多对多的关系。
然而,在现实世界中,不太可能创建单独的标签 table,因为它们在 Twitter 中的使用限制为 139 个字符,并且创建(全球)唯一 ID 系统将是难的。因此,主题标签的文本无论如何都可能被用作唯一键。