区分关系 table 名称和描述性实体 table 名称
Distinguishing between relational table names and descriptive entity table names
我有两个 table:
user
其中包含我所有的用户
user_status
其中包含用户可能拥有的所有可能状态。还有其他状态(例如订单状态,所以将 table 的名称简化为 status
不是一个选项)
我将如何命名一个将用户映射到他们的状态的 table?
我正在考虑 user_user_status
但 似乎 有点不清楚
我知道我可以通过 user
table 中的外键 link 这两个,但我希望尽可能规范化数据库-- 我可以预见必须跟踪用户状态历史记录的可能性
您可以随意命名 table。
一个用户一次只能有一个状态吗?
您是否需要保留用户状态的历史记录?
状态table中唯一的属性是状态值吗?如果不是,这个 table 中还有哪些其他属性?
这并没有真正回答你的问题,但无论如何我必须 post 这个。
你问的是many-to-many(M-M)的情况,但是你承认你的数据确实是one-to-many(1-M),也就是说一个用户可以有一个而且只有一个状态。是的,您可以使用 M-M 对其进行建模,是的,您可以使用它来跟踪历史记录(用户状态如何随时间变化),但是在较长的 运行 中,这将使您承受不必要的过于复杂的结构充其量是尴尬的工作。 (去过那里,做到了。相信我。)我强烈建议使用 tables User 和 UserStatus,将 UserStatusId 列作为 table User 中的列,并添加 table UserStatusHistory 当(不是如果!)您需要跟踪它如何随时间变化。
好吧,话虽如此,如果一个用户可以一次分配多个用户状态,我会做
用户
UserStatus(无下划线,保存以备不时之需)
User_UserStatus(比如现在)
(我不会UserStatus_User,因为大概用户是模型中更“重要”的实体。)
我有两个 table:
user
其中包含我所有的用户user_status
其中包含用户可能拥有的所有可能状态。还有其他状态(例如订单状态,所以将 table 的名称简化为status
不是一个选项)
我将如何命名一个将用户映射到他们的状态的 table?
我正在考虑
user_user_status
但 似乎 有点不清楚我知道我可以通过
user
table 中的外键 link 这两个,但我希望尽可能规范化数据库-- 我可以预见必须跟踪用户状态历史记录的可能性
您可以随意命名 table。
一个用户一次只能有一个状态吗? 您是否需要保留用户状态的历史记录? 状态table中唯一的属性是状态值吗?如果不是,这个 table 中还有哪些其他属性?
这并没有真正回答你的问题,但无论如何我必须 post 这个。
你问的是many-to-many(M-M)的情况,但是你承认你的数据确实是one-to-many(1-M),也就是说一个用户可以有一个而且只有一个状态。是的,您可以使用 M-M 对其进行建模,是的,您可以使用它来跟踪历史记录(用户状态如何随时间变化),但是在较长的 运行 中,这将使您承受不必要的过于复杂的结构充其量是尴尬的工作。 (去过那里,做到了。相信我。)我强烈建议使用 tables User 和 UserStatus,将 UserStatusId 列作为 table User 中的列,并添加 table UserStatusHistory 当(不是如果!)您需要跟踪它如何随时间变化。
好吧,话虽如此,如果一个用户可以一次分配多个用户状态,我会做
用户
UserStatus(无下划线,保存以备不时之需)
User_UserStatus(比如现在)
(我不会UserStatus_User,因为大概用户是模型中更“重要”的实体。)