我已经想出了我的大部分数据模型用于新的iOS应用程序,现在我遇到了一个我一直在考虑的问题。对于iOS应用程序没有NULL值和重复数据库的数据库设计
'实验'具有名称,描述和所有者。它还有一个“行动”和一个“事件”。
'事件'可能是不同的事物:时间,地点或速度。
根据“事件”是什么,它可以有不同的'类型'。例如,时间可以是一次性,间隔,日期范围,重复或随机。位置可以是区域或准确的位置。
每个'Type'都有一个值,它具有唯一的数据类型。时间一次性可以是下午12:15的日期值,位置精确可以是(30.0,-20.0)的GeoPoint值。
的问题
- 如何设计数据模型,使数据库不与NULL值千疮百孔 ?
- 如果我添加更多“事件” 和“类型”,我如何设计数据模型为可扩展的。
思考
做实验只有一个动作,一个事件,那将是错误的,这两个进不同的表分开,但不这样做会导致该实验台是全空的值,因为我必须有Event,Event Type和Event Type Value的列来补偿可能为事件类型值输入的所有可能数据类型。 (日期,整数,字符串,地址点等)
将事件和事件类型分隔到一个单独的表中可能会修复NULL值问题,但我会留下重复数据,尤其是在时间的情况下类型一次性的事件为中午12:00,因为这将在其他实验中存在,而不仅仅是一种。 (除非我创建每个可能性,并用这些填充单独的表格 - 我怎么能轻松地做到这一点?)
也许我过于复杂的事情,也许我错过了这么简单的事情,我要踢我自己当我看到它。
威基德,谢谢你,这图是一个巨大的帮助。有一件事 - EventType只有一种类型,而不是全部三种。因此无论是时间,地点还是速度。 – jcrowson 2014-08-27 19:05:09
很酷。如果事件类型不仅仅是一个名字(即一个列表),那么你可能想要将它们表示为模型中的对象(我不确定你想要做什么)。如果这是你所说的那么肯定放弃这3个实体,你应该是好的。我在想这个的方式是一个事件可以关联到3种不同的事件类型之一。事件类型实体将保存该类型的描述性信息,而时间,位置,速度将保存与这些对象相关的细节(例如时间:日期,时间,时间范围,时区等等)。祝你好运。 – Wizkid 2014-08-27 19:10:22
事情是 - 我认为他们作为对象更好。问题是创建这三个对象和Event Type对象之间的关系,而不创建NULL值,因为只有1是必需的,所以其他两个将是NULL。如何从Event类型对象中只引用一个对象而不需要两个以上的空指针? – jcrowson 2014-08-27 19:14:52