Может ли git установить sh связь между двумя подклассами, которые совместно используют один и тот же суперкласс (связь IS-A)? - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть вопрос, касающийся проекта, которым я занимаюсь, и надеюсь, что вы могли бы оказать некоторую помощь:)

Полиция разыскивала подозреваемого в убийстве после того, как вчера был застрелен человек. Единственная подсказка заключается в том, что жертва оставила записку с именами пяти человек, и полиции необходимо было найти информацию об этих пяти людях путем поиска в базе данных граждан (имя не является уникальным, поэтому может быть более пяти результатов. определить, кто вам нужен гражданин ID). После нахождения убийцы, полиция должна внести изменения в судимость убийцы. Мне интересно, как я могу это сделать?

Поскольку сущность Victim и сущность Murder_suspect имеют одинаковые атрибуты с сущностью Citizen, мой первоначальный план состоял в том, чтобы жертва и murder_suspect стали двумя подклассами, совместно использующими один и тот же суперкласс ( гражданин), то есть жертва гражданина ИСА и убийца гражданина ИСА. Тем не менее, я не уверен, если git установить sh отношение между двумя подклассами, которые совместно используют один и тот же суперкласс (отношение IS-A). Кроме того, я думаю, что первичным ключом murder_suspect должен быть Citizen.name вместо Citizen.id, но я не думаю, что первичный ключ подкласса мог бы отличаться от первичного ключа его суперкласса. Мне интересно, может ли кто-нибудь помочь с моей путаницей и дать мне несколько советов, заранее спасибо:)!

PS Чтобы было понятнее, гражданин субъекта имеет следующие атрибуты: id, name, phone_number, address , Criminal_record, et c.

Большое спасибо за любую помощь, которую кто-либо может предоставить:)

1 Ответ

1 голос
/ 19 апреля 2020
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

Кроме того, я думаю, что первичным ключом murder_suspect должен быть Citizen.name, а не Citizen.id

Я бы придерживался CitizenId, а не CitizenName. Его быстрее смотреть по int / bigint, чем по varchar / text. Кроме того, я бы добавил Id в качестве PK как для жертвы, так и для подозреваемого, потому что через некоторое время во все большем и большем числе случаев у вас возникнет проблема: каждый может совершить только одно преступление, поскольку запись о гражданине уже находится в «подозрительной» таблице по другому делу? Вы могли бы сделать два столбца PK (CitizenName + CaseId), но почему? Я бы не стал связывать жертву с подозреваемым. Вы можете связать жертву с преступлением и подозревать в совершении преступления. Там нет ничего, что связывает их напрямую. Дело связывает их, так что придерживайтесь реальности.

гражданин субъекта имеет следующие атрибуты: идентификатор, имя, номер телефона, адрес, имя_уголовника и т. Д. c.

  1. Может быть, это слишком много, но как насчет размещения адреса в другой таблице? Что делать, если у кого-то есть два адреса? двух разных видов?
  2. Номер телефона может быть в адресе или в таблице «Контакт»?
  3. Criminal_record? с чем? огромный текст всех преступлений? Я бы придерживался отношений с «подозреваемым» столом или чем-то в этом роде
...