数据库:何时决定是否需要“表关系”?

时间:2017-03-01 05:49:43

标签: mysql database database-design one-to-one

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

enter image description here

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

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

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

请注意,profile_goalgoal_type之间没有任何关系。我可以通过在one to one表格中创建foreign_key goal_type表来建立profile_goal关系。我没有这样做的原因是因为在某一天如果开发人员决定更改或删除goal_type中的项目,那么它将影响到数千名选择该目标的用户。 例如,goal_type名为reduce 5kg in one month,有数千名用户选择此项;一段时间后,开发人员决定将其删除或将目标更改为eat 3 fruits this week。现在,对于选择reduce 5kg in one month的人来说,这是一场灾难。

我当前设计的缺点是,想象用户已经为goal_types设置了other并且还为profile_goal指定了一些内容。因此,goal_type中的所有4个目标都将在4行中提供。如果开发人员确实更改了goal_type中的目标,那么在更改之前加载other时,将无法在复选框中显示,应用程序会将其视为others。然后我们有2 other用户已经指定background-repeat: no-repeat; min-height:768px; height:auto; background-attachment: scroll; background-size: 100% auto; background-image: url("../images/login/****.jpg"); !!

关于什么是最好的?

1 个答案:

答案 0 :(得分:0)

如果不了解存储的值的类型,详细回答是很棘手的。尽管如此,有效表可能如下所示:

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一起的实际目标,但我们目前只有目标类型;没有'目标'表