让我假设,我有一个名为'name''的父表,两个名为'Malename'和'femalename'的子表格。
但有些名字都可以拥有(在亚洲国家/名字中更常见(。因此,我是否需要在Marename和feyalename表中存储此类名称。但这将触发冗余,不感觉不正确,或者我将第三个表格为" commonName"以持有这样的名称,这再次感觉不正确。
那么,解决问题的最佳实践是什么?
如果它不比您的示例更复杂,那么首先有一个以上的表是多余的,只需在名称表上有两列即可标记,如果是男性或女性,例如
CREATE TABLE Name
(
Name VARCHAR(255) NOT NULL,
Male BIT NOT NULL,
Female BIT NOT NULL
);
如果您绝对需要MaleName
和FemaleName
作为对象,则可以始终创建视图:
CREATE VIEW dbo.MaleName
AS
SELECT Name
FROM dbo.Name
WHERE Male = 1;
假设这不像您的示例那样简单,那么处理此问题的一种相当常见的方法是与一个协会实体(交界表(,因此您最终会得到3个表,类似
之类的东西名称(nameid(pk(,名称(
性别(Genderid(PK(,描述(
namegender (nameid(pk,fk(,gendiD(pk,fk((
最后,如果您将其设置在继承方法上,则如果您正确执行操作,则不会引起冗余。男性和女性名字共有的任何属性都应存储在父表中,因此两个子表中的任何信息都不是多余的