我被问到一个关于数据库设计的新手问题,我想知道是否有人可以确认我的回答是否合适。
有一个医疗诊所,患者和员工。患者有卡号,员工有TaxPayerId。员工可以是患者,反之亦然。患者和员工都有FirstName,LastName,BirthDate和PhoneNumber。问题是我们需要多少个表来表示这个数据结构以及可以有哪些替代方案?不同替代品有什么好处?
我对此问题感到困惑,并回答我们可以使用单个表(SQLite语法):
CREATE TABLE Person (ID INTEGER PRIMARY KEY AUTOINCREMENT,
FirstName TEXT NOT NULL, LastName TEXT NOT NULL,
BirthDate TIMESTAMP NOT NULL, PhoneNumber INTEGER,
MedicineCardNumber INTEGER, TaxPayerId INTEGER);
据我所知,这张表并没有违反第3范式的规定,但我并不完全确定。至少,据我所知,非关键属性之间没有传递依赖关系,因为函数依赖关系是:MedicineCardNumber-> FirstName,LastName,BirthDate,PhoneNumber和TaxPayerId-> FirstName,LastName,BirthDate,PhoneNumber。 ID是我自己添加的主键,原始任务中没有ID。
如果此表格为第3范式,可以使用哪些替代方法?我觉得问这个问题的人期待更详细的回答。