【问题标题】:creating a new mysql table with a primary auto incrementing id that is linked to another table?创建一个新的 mysql 表,其主自动递增 id 链接到另一个表?
【发布时间】:2012-04-26 20:29:43
【问题描述】:

我希望两个表共享一个主自动递增 id,这可能吗?我该怎么做呢?他们有什么我需要考虑的吗?

我这样做的原因是因为它是比将组列添加到用户表更好的解决方案,也比创建完全独立的组表更好,因为如果它们共享主键,我可以使用现有的组和用户的帖子表。而不必创建两个不同的帖子表,(组帖子的 group_posts 表。用户帖子的 user_posts 表。)

现有用户表是

id(primary, ai)

用户名

密码

电子邮件

我想使用共享的 ai 主键链接到我的用户表的组表

id(primary, ai, 链接到用户表id)

组名

创建者

创作日期

等等

【问题讨论】:

  • 如果两个表具有完全相同的主键,那么它们没有理由不应该是一个表。似乎您正在组和用户之间创建一对一的关系,这看起来很奇怪。
  • 通过使它们一对一,我可以重用许多预先存在的用户功能并将它们应用于组。到目前为止,例如关注、发帖、发帖、发帖等组和用户基本相同。我可以通过创建一个标识该行是组还是用户的列来区分这两者。
  • 1-1 的替代方案是将组和用户表完全分开。从我的帖子表中输出帖子时,这可能会造成问题。因为posted_to id 会与users 和groups 表冲突。我想我可以在帖子中创建一个列来区分posted_to_groups和posted_to_users。

标签: mysql database-design database-schema


【解决方案1】:

您应该通过执行以下操作使您的架构更清晰:

  1. 创建一个表(例如people
    • id,主键,自增
    • type,告诉你是 user 还是 group
  2. people 上制作usersgroups 主键外键
    • people 中插入记录
    • 获取使用LAST_INSERT_ID()分配的ID
    • 使用上面获得的 ID 适当地插入 usersgroups

然后您将在 posts 表等中引用“人员”,而不是“用户”或“组”。

从概念上讲,从 OO 的角度考虑,这意味着 usersgroups 都扩展了 people

【讨论】:

    猜你喜欢
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    相关资源
    最近更新 更多