gpt4 book ai didi

mysql - 数据库:什么时候决定是否需要 `table relationship`?

转载 作者:行者123 更新时间:2023-11-29 19:19:26 25 4
gpt4 key购买 nike

我正在设计一个数据库,请查看下表

enter image description here

基本上,这是一个健身应用程序。创建用户的个人资料时,他必须决定他的“目标s”是什么。在我们的应用中,我们将目标列表显示为复选框,并提供其他字段来输入“目标”(如果他的目标不在我们的列表中)。

在我们的表格中,goal_type 包含我们将以复选框形式向用户显示的目标列表。

profile_goal 中,它将包含从复选框中选择的目标s用户列表,如果有其他内容,也包含该目标。

请注意,profile_goalgoal_type 之间没有关系。我可以通过在 profile_goal 表中创建 goal_type 表的 foreign_key 来建立一对一关系。我没有这样做的原因是,如果有一天开发人员决定更改或删除 goal_type 中的某个项目,那么它将影响成千上万选择该目标的用户。例如,有一个名为一个月减掉 5 公斤goal_type,成千上万的用户选择了它;一段时间后,开发人员决定删除它或将目标更改为本周吃 3 个水果。现在,对于那些选择一个月减掉5公斤的人来说,这简直就是一场灾难。

我当前设计的缺点是,想象用户已经设定了 3 个目标类型,并且还为其他指定了一些内容。因此,所有 4 个目标将在 profile_goal 的 4 行中提供。如果开发人员确实更改了 goal_type 中的目标,则在加载更改之前的 goal_type 时,复选框中将不可用,并且应用程序会将其视为其他.然后我们有 2 个 others,其中用户已经指定了 other !!

知道什么是最好的吗?

最佳答案

如果不了解有关存储值类型的更多信息,就很难详细回答。尽管如此,有效的表可能如下所示:

goal_type
( goal_type_id int auto_increment primary key
, goal_type varchar(50) not null unique
)

customer_goal
(customer_id int not null
,goal_type_id int not null
,created timestamp
,updated timestamp
,primary key (customer_id,gial_type_id)
);

对我来说,我们会存储“一种目标类型”而不是与 customer_id 一起存储的实际目标,这似乎很奇怪,但我们目前只有目标类型;没有“目标”表。

关于mysql - 数据库:什么时候决定是否需要 `table relationship`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42524167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com