我的客户在注册我的应用程序时使用以下之一:
E 124xyz_codee 225)、"pass_key")(为了简单起见,还省略了大约15个假名)
我不希望我的数据库中有10-15个表,因为我提供了不同的API集成选项(特别是当它们都是为同一件事情而只是从整个列表中选择一个时)。
我的解决办法是:
使用名为api_configuration的列创建一个api_name表,该列包含特定API的代码(例如,"foo_api")
创建一个名为credentials_attribute的表,其中包含一个外键返回到api_configuration,一个名为name的列和一个名为value的列。
然后构建一个用于选择API的UI。如果他们选择Acme,它将请求一个"secure_code“、"username”和"password",并在credentials_attribute中为每个名称/值对创建一行。
在我的api_configuration ORM模型上,我可以根据当前的api_name创建一个查找credentials_attribute值的方法。
这个解决方案是正确的,还是如果你必须为这个问题建立模型的话,你还会用别的方法去做吗?请解释你的理由(如,更好的性能等)
发布于 2010-10-07 10:19:30
如果我正确地理解了这个案例,它看起来就像另一个gen规范设计模式的例子。查找“泛化专业化关系建模”。
关于对象建模的教程通常包括gen-spec,而关于关系建模的教程通常没有。但这是很好的理解,并有一些优秀的文章在网上。
发布于 2010-10-07 08:40:35
我可能更喜欢用一张桌子来完成这个任务。
有一个UserAuthentication表,其中列有IdentificationKey, AuthenticationCriteria1, AuthenticationCriteria2等.
AuthenticationCriteriaX列数=任何API将具有的最大标准数。我假设这将是一个合理的东西,也许5在最多,但任何到15-20实际上仍然是一个相当小的桌子。
UserAuthentication表还有一个api_key列,它是来自MASTER_API表的外键,该表是所有受支持的API的列表
至于问题的UI部分,即显示UserAuthentication表中的任何字段的用户的标签,我认为这只是UI关注的问题,因此您应该只需要在UI层的某个位置拥有特定于每个api的映射。可以根据需要使用api_key列进行翻译。移民局不一定需要知道这些细节,海事组织。
发布于 2010-10-07 08:32:14
如果我正确理解的话,不同API中的所有这些属性在概念上都是同一3件事物的元组,以不同的名称命名,对吗?
您的描述是从DB的角度来描述的--我将描述我将在域端做什么(这可能直接映射到您的模式)。
我将创建一个类,例如UserLogin,其中包含上面提到的3个属性(例如authenticationCode、userId、password),并将API名称/代码映射到GUI属性名称。当用户选择首选API时,我可以在GUI上显示具有适当名称的字段,并将值填充到UserLogin的相应属性。如果需要,UserLogin还可以为该用户存储首选的登录API。通过这种方式,UserLogin被映射到DB端的单个表。我可以使用另一个表来为每个已知的API配置属性名。
https://stackoverflow.com/questions/3879806
复制相似问题