2010-05-07 135 views
3

我错误地设计我的数据库,我应该在开发时修复这个问题吗?数据库设计1对1关系

“用户”表被假设为具有与“USERPROFILE”表

然而实际的设计“用户”表具有1.1关系的1 *用“USERPROFILE”表的关系。

一切正常!但是它应该修复吗?

+0

是的,你可以...主键和外键适应得很好,然后它的作品。 – berkay 2010-05-07 04:43:46

回答

3

做一件事

User Table 
    Userid(p) 
    UserName 
    othercol.. 

UserProfile 
    id(p) 
    UserId(f) - and unique 
    othercol.. 

希望这种方式,您可以轻松地修复ISSE

+0

查看上面的回复。 – 001 2010-05-07 05:03:17

2

使user_profile表中的user_id为唯一且固定的。

0

@pranay

User Table 
    Userid(p) 
    UserName 
    othercol.. 

UserProfile 
    id(p) 
    UserId(f) - and unique 
    othercol.. 

是,通常你如何做到这一点(如上图)?或者你做这个(下面)?

User Table 
    Userid(p) 
    UserName 
    othercol.. 

UserProfile 
    id(p) <--- userid 
    othercol.. 
+0

是的,你也可以这样做,因为你必须在这两个表之间建立一对一的关系 – 2010-05-07 05:14:58

+0

鉴于OP有一个现有的设计,它们的列更可能适合你的第一个例子。在这种情况下,实现你的第二个建议将涉及重写应用程序的一部分,而对外键列强制执行一个唯一的约束则不会。 – APC 2010-05-09 03:10:18

2

如果它是一个1:1的关系,你往往是从“用户”表和“用户配置文件”带回记录在一起,那么你可以考虑只将它们合并成一个表。

1

是的,请在FK字段中使用唯一索引来解决此问题。现在需要修复的原因是,如果数据库设置不正确,那么不能控制不希望的行为,因此无法控制人们在多长时间内插入数据的时间。

您第一次插入到子表中的重复记录时,可能会破坏很多代码。没有唯一的索引,第二条记录插入的机会可能相当高。你可以说,你可以在应用程序级别控制它,但这是一个糟糕的选择,因为没有人保证其他应用程序,批量插入等不会发生,从而绕过应用程序。在数据库设计中尽快把事情做好是至关重要的。当数据库中有很多记录时,修复糟糕的设计变得非常困难。