对于我目前追求的数据库设计是否健全,我会喜欢一些意见。
让我们假设我正在构建一个名为“Home”的表,这个表有一个名为“rooms”的文本字段。在此字段中是此房屋所具有的一组房间的序列化数据。当然,我的第一直觉是将这些数据标准化为单独的“房间”表。但是,由于过去过度规范化数据库的一些令人沮丧的经历,我停下来问自己几个问题:
每个问题的答案都是“不”。房间记录都是每个家庭独有的。例如,永远不需要执行查询来查明数据库中有多少家庭有浴室。数据将始终从主页的角度提取。卧室和浴室的数量将明确存储在主记录中以供搜索。
因此,我不想不断地加入Rooms,而是想知道序列化这些数据并将其弹出到文本字段会有什么危害。
这对我来说很有意义,但我希望能够进行理智检查。感谢您的任何意见!
答案 0 :(得分:3)
好吧,您可能无需查询以查找以下内容:
等等。
如果你正确地设计你的基础,那么你将在未来处于更好的位置......不管现在看起来有多么诱人的捷径。
另外,使用单独的ROOMS表,您将能够添加其他有意义的房间字段(如宽度/高度,颜色,楼层等),如果数据只是全球化的话,那将非常困难进入一个领域。
人们会想要以意想不到的方式进行查询,例如:
通常,使用ROOMS表只会使您的应用程序更强大,更易于使用。
嘿,我得到你所说的“过度标准化的数据”。我们都去过那里,它咬了一口。但是,在具有住房信息的数据库中具有ROOMS表并未“过度标准化”。它只是以正确的方式构建应用程序。答案 1 :(得分:3)
务实的答案......
如果a * c > b
那么你现在应该分解。
答案 2 :(得分:1)
除了其他人所说的做正确的事情之外,我想补充一下关于表现的评论。
由于您将序列化的房间数据存储为表Home中的列,因此行大小将显着增加。这将导致所有其他查询的性能下降。
答案 3 :(得分:0)
嗯,你说房间记录是唯一的,但你不能强制执行。因此,在当前的设计中,您无法确切知道这一点:您的所有代码都应该是完美的代表。
“不断加入”并不难做到,但如果确实如此,你总能为此制作一个视图,而且你已经完成了。