【发布时间】:2019-02-19 22:50:20
【问题描述】:
有一个村庄,村民们参观了多间房屋。我想存储哪个村民拜访了哪个房子,以及他们多久拜访一次。我决定按如下方式创建表;
CREATE TABLE 'visitis'('villager' TEXT NOT NULL, 'house' INTEGER NOT NULL, 'amount' INTEGER NOT NULL DEFAULT 0);
表格存储如下;
-
villager存储村民的姓名。每个村民都有一个独特的名字。 -
house是房子的地址。这是一个整数。 -
amount存储该村民去过那所房子的次数。
此表不包含主键,因此,我认为不是最佳的。村民的数量和房屋的数量都未定义,以至于将村民或房屋存储为列已不再有效。
多行可能包含相同的村民姓名,并且多行可能包含相同的住宅地址。唯一已知的独特性,是村民和房子的组合是独一无二的。因此我想知道是否有一种方法可以将两列用作共享主键。这可以节省大量时间,但我不确定 SQLite 是否能够做到这一点。 如果没有,有没有更好的方法来做到这一点?我有条件;
- 大多数村民会参观多个房屋。不过这个数量比较少,可以假设在 50 栋以下;
- 有很多房屋(整数)不会被访问。然而,被访问过的房屋通常会被多达 10 名村民访问;
- 村民会参观数量有限的房屋,只有少数人会参观 1000 多座房屋;
- 重要的是要存储哪个村民去过哪个房子的频率;
- 需要经常通过村民姓名和房屋地址号码访问数据;
- 房屋数量和村民数量都可以很高。
也许我遗漏了一些显而易见的东西。我是……?
【问题讨论】:
-
嗨。这里唯一的 CK(候选键)是 {villager, house}。如果您决定想要一个,那是唯一可能的 PK。是时候阅读有关信息建模、关系模型和数据库设计的教科书了。 PS这不清楚:“村民数量和房屋数量都未定义到将村民或房屋作为列存储不再有效的程度。”您的意思是通过实施减少字符串存储吗?你知道你已经为每对可能的村民 - 房子描述了一张桌子吗?你想避免这种情况吗?
-
这是一个常见问题解答。请始终在谷歌上搜索您的问题/问题/目标的许多清晰、简洁和特定的版本/措辞,带和不带您的特定字符串/名称,并阅读许多答案。将您发现的相关关键字添加到搜索中。如果您没有找到答案,请发布,使用一个变体搜索您的标题和关键字作为您的标签。请参阅向下投票箭头鼠标悬停文本。 (例如,使用 'site:Stack Overflow sqlite' 搜索您的标题。)
标签: sqlite primary-key