【发布时间】:2011-03-05 11:09:26
【问题描述】:
因此,根据Mehrdad's answer to a related question,我明白“正确的”数据库表列不存储列表。相反,您应该创建另一个有效保存所述列表元素的表,然后直接或通过联结表链接到它。但是,我要创建的列表类型将由独特的项目组成(与链接问题的 fruit 示例不同)。此外,我的列表中的项目是明确排序的——这意味着如果我将元素存储在另一个表中,我每次访问它们时都必须对它们进行排序。最后,列表基本上是原子的,因为任何时候我想访问列表,我都想访问整个列表,而不仅仅是其中的一部分——所以不得不发出数据库查询来收集碎片似乎很愚蠢列表。
AKX 的解决方案(上面链接)是将列表序列化并将其存储在二进制列中。但这似乎也很不方便,因为这意味着我必须担心序列化和反序列化。
有没有更好的解决方案?如果没有没有更好的解决方案,那为什么呢?看来这个问题应该时不时出现。
...只是更多的信息让你知道我来自哪里。当我刚开始了解 SQL 和一般数据库时,我就开始使用 LINQ to SQL,所以现在我有点被宠坏了,因为我希望处理我的编程对象模型而不必考虑对象是如何处理的被查询或存储在数据库中。
谢谢大家!
约翰
更新:所以在我得到的第一批答案中,我看到“你可以走 CSV/XML 路线……但不要!”。所以现在我正在寻找原因的解释。给我一些好的参考。
另外,为了让您更好地了解我在做什么:在我的数据库中,我有一个函数表,其中包含 (x,y) 对的列表。 (该表还将包含其他对我们的讨论无关紧要的信息。)我永远不需要查看 (x,y) 对列表的一部分。相反,我会将它们全部绘制在屏幕上。我将允许用户拖动节点以偶尔更改值或向绘图添加更多值。
【问题讨论】:
-
原子访问/修改的值实际上只是一个值。例如,没有人会反对将 URL(实际上只是一个字符列表)存储为 db 表中的字段。我不同意下面的答案“如果你现在这样做,你以后会再做一次”。听起来您已经考虑过这种情况是否对您的用例有意义。当您发现自己需要在列表上添加约束或对列表项进行单独访问时,您应该规范化您的数据库并创建一个 JOIN 表。
标签: sql linq linq-to-sql database-design linq-to-entities