您将如何为此类问题设置数据库?

时间:2010-07-22 01:28:10

标签: mysql language-agnostic database-design

我是数据库设计的初学者。我有两个问题需要使用数据库解决,但我不知道如何处理未知数量的字段。

以下是我想要存储的两种类型的数据(它们代表了我认为的相同架构问题):

我想为地图路线存储一堆坐标。建议的数据库看起来像这样:

Name            Point 1    Point 2  ...
----            -------    -------

Jogging Loop    5, 10      6, 11    ...

我想要解决的另一个问题是字谜的部分求解器。我想通过一本字典并按字母顺序排列每个单词中的字母。对于每个按字母顺序排列的字符串,我想关联可以从该字符串形成的单词。 IE

Alphabetized String        Word 1     Word 2     Word 3
-------------------        ------     ------     ------
abet                       abet       beat       bate

我不知道如何解决的部分是未知的列数。必须有一种比基于表中任何行的最大长度的任意#列更好的方法。我需要两张桌子并以某种方式加入吗?

感谢您了解这通常是如何解决的。

4 个答案:

答案 0 :(得分:1)

您不需要尝试在要垂直表示数据的水平表中表示它。所以相反

Name     Point    x    y
----     -----    -    -
Route    1        5    10
Route    2        6    11
...

另一个模式相同。基本上只是更改您的维度,因此您要添加行而不是列。

答案 1 :(得分:0)

您没有未知数量的“列”。

你有一个由两部分组成的钥匙。

地图路线:

Name, Point, Sequence
"Jogging Loop", (5, 10), 1
"Jogging Loop", (6, 11), 2

按字母顺序排列的字符串

Name, Word, Sequence
"abet", "abet", 1
"abet", "beat", 2
"abet", "bate", 3

答案 2 :(得分:0)

制作两个与Routes.RouteID = Points.RouteID

相关的表格
Routes
------
RouteID RouteName
1       Jogging Route 1
2       Jogging Route 2

第二张表:

Points
------
Point RouteID
1,2   1
2,3   1
3,4   2

答案 3 :(得分:0)

像这样的问题的通常解决方案是normalize表。

在这种情况下,这将产生2个表。

  1. 第二个示例中包含原始路线或单词的表格。 作为列应该有:
    • 主键(名为id的自动增量字段将是我的建议)
    • nameword列。
  2. 带坐标/字谜的表格。
    • 也是主键(主键在任何表中都必不可少)
    • 第一个表的外键
    • 具有坐标/ anagram
    • 的列