真的需要一张新桌子吗?

时间:2014-03-20 01:32:10

标签: mysql sql

我正在为一家小公司制作一个sql数据库..几乎其他表与问题无关,所以列出了这两个问题......

有一张桌子:

 NextofKin:
 fname
 lname
 street
 no
 houseno
 city

 Patient:
  ID[pk]
 fname
 lname
houseno
  city

我需要一张适合街道,房屋和城市的独立桌子吗?

还知道我可以用作NextOfKin的主键吗?

2 个答案:

答案 0 :(得分:1)

您的问题开始进入database normalization

应该做什么从不在表之间复制数据,除非该数据与表相关,并且该数据应该被编入索引。会想到这样的事情(根据业务逻辑,可以采用不同的方式构建它)

  • PersonalData:id,fname,lname,address1,address2,city,state,zip
  • 患者:id PK,personal_data_id FK,next_of_kin_id FK

当然,大多数表已经存在,所以这可能是不可能的。但是直接回答你的问题,既然数据库已经没有正常化,那么就没有好的地方可以放置更多的地址记录(不要在Patient下想要它们吗?)所以你&#39 ;重复粘贴数据。即便如此,PatientNextOfKin之间也必须存在某些关系,因此PatientNextOfKin或[{1}}都会引用NextOfKin或{{1}} hods引用患者。无论哪种方式,您可以考虑在它们之间使用外键来强制执行并明确说明这种关系。

答案 1 :(得分:1)

是的,请使用pk作为近亲。

在患者和近亲之间使用连接表。多个患者可以将同一个人列为近亲,虽然您的应用程序今天可能不需要有人将多个人指定为近亲,但他们将来可能会改变主意,您的应用程序将支持它。

我自己,我总是使用一个单独的地址表。由于通常不止一个人住在一所房子里,一个人可以有一个以上的房子,你会再次使用一个连接桌。