最好通过一个例子来理解这个问题。
我有一家医院,有3家主要药店叫;中央药房,病房药房和私人套房。
可以随意添加,删除和扩展这些药房。当这些事情继续下去时,我很想知道我的代码,当我们谈论中央药房或病房药房时,没有硬编码ID。
有人可以帮助我解决这个问题吗?
当回答这个问题时,我会提出一个不同的场景。提前谢谢大家。
编辑#1
我认为会有某种表设计和表格。代码设计模式,以实现这种灵活性。
答案 0 :(得分:1)
如果您没有对ID进行硬编码,则需要对某些内容进行硬编码,您只是说您的代码想知道它与中央药房有效,所以 / em>关于它在这里被硬编码到逻辑中。
身份证这么糟糕吗?
您是否可以在数据库中存储行为标记,以便不是说if (pharmacy.Name == "Central Pharmacy") ...
而是说if (pharmacy.IsCentral) ...
或类似?
答案 1 :(得分:1)
如果没有硬编码ID,有两种方法可以解决:
关于第一个选项:
如果您只需要一个中央药房,您的代码需要确保在没有其他药房的情况下只能将该类型设置为“中心”。
如果您需要随时拥有中央药房,那么您的代码需要确保无法删除中央药房,并且可能只是从界面“删除”中央药房类型以添加删除和更改其他药房。
请注意,在编写此类“单实例”约束时,您可能需要在更新之前和之后查看表宽锁或重新读取/重新检查。最后,只有一个不可删除的中央药房可能会更容易处理。
答案 2 :(得分:1)
我的初始表格设计是
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)
)
这样可以添加通用药房以及您提及的类型。
在某个时间点,无论如何,您都必须对Central Pharmacy(以及所有)的PharmacyTypeID或其名称进行硬编码。