【问题标题】:is it legit to establish a relationship between two subclasses which sharing the same superclass (IS-A relationship)?在共享相同超类的两个子类之间建立关系(IS-A 关系)是否合法?
【发布时间】:2020-08-01 12:03:42
【问题描述】:

我有一个关于我正在做的项目的问题,希望你能提供一些帮助:)

昨天有人被枪杀后,警方正在寻找谋杀嫌疑人。唯一的线索是受害人留下了一张写有五个人名字的字条,警方需要通过在公民数据库中搜索找到这五个人的信息(名字不是唯一的,所以可能有五个以上的结果。唯一确定您需要公民身份证的人)。找到凶手后,警方需要对凶手的犯罪记录进行修改。我想知道我该怎么做?

由于实体 Victim 和实体 Murder_suspects 都具有与实体 Citizen 相同的属性,所以我最初的计划是让受害者和谋杀嫌疑人成为共享同一个超类(citizen)的两个子类,即受害者 ISA 公民和谋杀嫌疑人 ISA 公民。但是,我不确定在共享相同超类的两个子类之间建立关系(IS-A 关系)是否合法。另外,我认为谋杀嫌疑人的主键应该是citizen.name而不是citizen.id,但我不认为子类的主键可能与其超类的主键不同。我想知道是否有人可以帮助我解决我的困惑并给我一些建议,在此先感谢:)!

附:说得更清楚一点,实体公民有以下属性:id、name、phone_number、address、criminal_record等。

非常感谢任何人能够提供的任何帮助:)

【问题讨论】:

    标签: sql entity-relationship er-diagrams


    【解决方案1】:
    Citizen
    -------
    Id
    FirstName
    LastName
    DateOfBirth
    Sex
    
    Address
    ------
    Id
    Street
    House
    City
    
    Case
    ----
    Id
    Name
    Date
    
    Victim
    -------
    Id
    CitizenId
    CaseId
    SomeUniqueToVictimProperty
    
    Suspect
    -------
    Id
    CitizenId
    CaseId
    SomeUniqueToSuspectProperty
    

    另外,我认为谋杀嫌疑人的主键应该是citizen.name而不是citizen.id

    我会坚持使用 CitizenId 而不是 CitizenName。通过 int/bigint 查找比通过 varchar/text 查找更快。此外,我会在受害者和嫌疑人中添加 Id 作为 PK,因为经过一段时间后,您会遇到越来越多的案件,您会遇到一个问题:每个人都只能犯罪,因为公民记录已经在另一个案件的“嫌疑人”表中?您可能会创建两列 PK (CitizenName + CaseId),但为什么呢? 我不会将受害者与嫌疑人联系起来。您可以将受害者与犯罪联系起来,将嫌疑人与犯罪联系起来。没有任何东西可以直接链接它们。案例将它们联系在一起,所以要坚持现实。

    实体公民具有以下属性:id、name、phone_number、address、criminal_record 等。

    1. 可能太多了,但是将地址放到另一个表中怎么样? 如果有人有两个地址怎么办?两种不同的类型?
    2. 电话号码可能在地址或“联系人”表中?
    3. 犯罪记录?什么?所有罪行的巨大文本?我会 坚持与“可疑”表或类似的关系

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-27
      • 1970-01-01
      • 1970-01-01
      • 2020-01-01
      • 2023-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多