我正在为学习者管理系统设计一个模式。
我目前有 LearnerDetails 表,该表存储以下信息类别。 - 登录用户帐户详细信息 - 联系方式和家庭住址 - 学习者的居住相关信息,包括国籍信息,留在英国的当前签证详情等 - 学习者当前的州福利相关信息 - 有关学习者当前就业状况的详细信息
我遇到的问题是,当所有这些信息都在一个表中表示时,列数超过70列。
我可以做的一件事是,我可以将信息分离到代表上述类别的不同表中,并将这些表与父表LearnerDetails关联为1:1关系。
我想知道这是否是推荐的做法。 在我看来,1:1关系将代表数据库过度规范化。但是,如果我不这样做,它将导致一个巨大的水平表作为我的 LearnerDetails 表。
非常感谢您能告诉我您的意见/建议。
答案 0 :(得分:2)
表中的许多列没有任何内在错误,只要你有5NF或至少3NF。
但是,有很多例子表明垂直分区(1 :: 1)有意义 - take a look at a similar question 。
答案 1 :(得分:2)
列有多宽?如果您的记录比页面大小更宽,那么拥有一个宽表是等待发生的性能问题。
地址通常不是与人的1-1关系。是的,大多数人只有一个,但并非每个人都这样。对于实习生来说,有时与他们离婚的父母住在一起。我建议将地址分开。如果存储电话号码,那么这两者通常不是1-1关系。您可能拥有一个商业号码和家庭电话(固定电话)号码的手机号码。任何有可能最终需要处于一对多关系的东西都应该从一开始就分开。
如果你确实将表格分开并希望强制执行一对一关系,yuo可以使用父表中的id作为子表中的PK,或者对表和设置使用不同的Pk FK字段的唯一索引。如果没有在数据库中强制执行它的方法,请不要设置一对一的实现。
答案 2 :(得分:1)
根据规范化要求,有70列或更多列是没有问题的。你没有提到你使用的rdbms,但大多数都支持至少255个字段。