Как я могу проверить динамический набор элементов из моего кода без жесткого кодирования? - PullRequest
1 голос
/ 20 августа 2010

Вопрос лучше всего понять на примере.

У меня есть Больница, в которой есть 3 основные аптеки; Центральная аптека, аптека Уорд и частный люкс.

Эти аптеки могут быть добавлены, удалены и расширены по желанию. В то время как они продолжаются, я хотел бы знать из моего кода, когда мы говорим о центральной аптеке или аптеке прихода без жесткого кодирования идентификатора.

Может ли кто-нибудь помочь мне с решением этой проблемы?

Я представлю другой сценарий, когда на него ответят. Спасибо всем заранее.

Редактировать # 1

Я думаю, что будет какая-то схема разработки таблиц и кода для обеспечения такой гибкости.

Ответы [ 3 ]

1 голос
/ 20 августа 2010

Без использования жестко заданных идентификаторов существует два способа:

  • Добавить «Тип аптеки» в таблицу аптек.Обязательно укажите, является ли это центральная аптека, аптека прихода или частный номер.
  • Добавьте другую таблицу из трех строк: одну с центральной аптекой и ее идентификатором, вторую - с аптекой отделения и ее идентификатороми т. д.

Что касается первого варианта:

Если у вас может быть только одна центральная аптека, ваш код должен обеспечить это, убедившись, что тип можно установить только на«Центральный», когда нет других аптек с таким типом.

Если вам нужно иметь центральную аптеку все время, тогда ваш код должен убедиться, что центральная аптека не может быть удалена и может просто «упасть»«Тип центральной аптеки из интерфейса для добавления, удаления и изменения других аптек.

Обратите внимание, что при кодировании таких ограничений« одного экземпляра »вам может понадобиться взглянуть на блокировки всей таблицы или перечитать / перечитать / перечитатьпроверка только до и сразу после обновления.В конце концов, иметь единственную не удаляемую центральную аптеку гораздо проще.

1 голос
/ 20 августа 2010

Мой первоначальный дизайн таблицы будет

CREATE TABLE Hospitals (
  HospitalID INTEGER PRIMARY KEY
  , Name VARCHAR(16)
)

CREATE TABLE PharmacyTypes (
  PharmacyTypeID INTEGER PRIMARY KEY
  , Name VARCHAR(16)
)  

CREATE TABLE Pharmacies (
  PharmacyID INTEGER PRIMARY KEY
  , HospitalID INTEGER FOREIGN KEY REFERENCES Hospitals (HospitalID)
  , PharmacyTypeID INTEGER FOREIGN KEY REFERENCES PharmacyTypes (PharmacyTypeID)
  , Name VARCHAR(16)
)

Это позволяет добавлять универсальные аптеки, а также типы, которые вы упоминаете.

В один моментвремя, так или иначе, вам придется жестко кодировать либо PharmacyTypeID центральной аптеки (и т.д.), либо их имена.

1 голос
/ 20 августа 2010

Если вы не жестко кодируете идентификатор, вам нужно жестко кодировать что-то , вы просто сказали, что ваш код хочет знать, что он работает с центральной аптекой, поэтому что-то о том, что здесь жестко запрограммировано в логике.

Является ли идентификатор плохим?

Не могли бы вы вместо этого хранить поведенческие флаги в базе данных, чтобы вместо того, чтобы сказать if (pharmacy.Name == "Central Pharmacy") ..., выскажем if (pharmacy.IsCentral) ... или подобное?

...