在数据库中实现重叠继承的最佳实践是什么

时间:2018-03-27 06:59:44

标签: sql sql-server database database-design

假设我有一个名为' Name'的父表。和两个名为' MaleName'和女性姓名'。

但有些名字是男性和女性都可以拥有的,(在亚洲国家/地区更为常见)。所以我需要在MaleName和FemaleName表中存储这样的名称。但这会引发冗余并且感觉不对,或者我添加第三个表作为“CommonName'保持这样的名字,再次感觉不对。

那么,解决这个问题的最佳做法是什么?

1 个答案:

答案 0 :(得分:3)

如果它并不比你的例子复杂,那么首先拥有多个表是多余的,只需在你的名字表上有两列来标记它是男性还是女性,例如

CREATE TABLE Name
(
    Name VARCHAR(255) NOT NULL,
    Male BIT NOT NULL,
    Female BIT NOT NULL
);

如果您绝对需要MaleNameFemaleName作为对象,那么您始终可以创建视图:

CREATE VIEW dbo.MaleName
AS
SELECT  Name
FROM    dbo.Name
WHERE   Male = 1;

假设这不像你的例子那么简单,那么处理这个的一个相当常见的方法是使用associative entity (junction table),所以你最终得到3个表,比如

名称(NameID(PK),名称)

性别(性别ID(PK),说明)

NameGender (NameID(PK,FK),GenderID(PK,FK))

最后,如果您设置了继承方法,那么如果您正确执行此操作,则不应导致冗余。男性和女性名称共有的任何属性都应存储在父表中,因此两个子表中的任何信息都不会是多余的