有哪些好方法可以对需要查询的数据进行建模,但哪些方法无法完全预先确定?
例如......说我想模拟有关世界各国的信息。每个国家/地区都有人口,标记和语言列表,这很容易。但是说我们也想模拟他们的国家棒球队的赢/输记录,当然并非所有国家都有。或者,我们想要跟踪他们的国王和他们的血统。女王(再次,显然不适用于大多数国家)。或者,我们决定要模拟平均氏族成员在一生中竖立的蒙古包的数量。
无论如何,重点是,我们不会(并且永远不会)知道在它袭击我们之前会发生什么。哪些方法既可扩展又可查询?
这可能是一个很好用于以文档为中心的数据库(MongoDB?),或者某些设计模式是否可以应用于经典的 Relational 数据库? / p>
答案 0 :(得分:7)
您可以在纯关系数据库中执行此操作,并享受关系数据库的速度和功能。
你需要使用第六范式,正确的方法,完整的完整性和控制。
EAV是6NF的子集,没有完整性或控制权,通常执行得非常糟糕。
我对这些问题的回答提供了对该主题的全面处理。由于提出了背景和论点,最后一个特别长。
答案 1 :(得分:4)
所有数据库都应该能够随着时间的推移而发展。如果您拥有合适的人员和组织,那么在模型出现时将新属性添加到应该没有问题。
答案 2 :(得分:2)
您可以应用Entity Atribute Value Model但它是PITA in rails;我使用过MongoDB,它非常适合您的需求。
答案 3 :(得分:0)
如果你正在使用Rails,你可以在你的模型中使用serialize :column_name
,它会成功地为你保留大多数对象,而无需任何额外的工作。如果您认为自己不需要无架构NoSQL数据库,那么这可能是您获取此功能最简单的方法。
class Country << ActiveRecord::Base
serialize :data
def add_statistic(name, value)
data[name] = value
end
def get_statistic(name)
data[name]
end
end
这些方法有些多余;他们只是为了展示给你一个例子。
此类系统的最大缺点是,如果您需要根据这些内容进行搜索或查询。毕竟,Rails不会为你处理Country.find_by_win_loss_record_of_national_basketball_team
。